【问题标题】:Find code in a string在字符串中查找代码
【发布时间】:2017-08-14 14:57:02
【问题描述】:

我正在开发一个 c++ 项目,该项目采用脚本,使用 html 跨度突出显示文本并将其输出到 GTKMM 窗口中。我让它工作,但我想制作一个注册代码而不是使用关键字向量的算法。 (我知道有网站和东西可以帮我做,但我只想制作这个软件)。

我现在正在努力突出 UnityC#,但我遇到了一个我自己和我的编码老师似乎无法解决的问题。 (我的老师没有花几个小时来检查哪里出了问题,但我们已经研究了一段时间)。

我查找所有句点并将它们放入一个向量中,然后循环遍历该向量并尝试获取正确的子字符串。我在句点 + 1 的位置开始子字符串,所以我不包括句点。然后我想在下一个句点到来时结束子字符串,所以我检查它何时找到从单词开头开始的另一个句点。第一次工作并打印“transform”,但第二次打印“position.x; var a=1”,第三次打印“x; var a=10;”。

std::vector<std::size_t> positions;
std::string pats = "GameObject.transform.position.x; var a=10;";
std::size_t pos = 0;

while(pats.find(".", pos) != std::string::npos)
{
    std::size_t found = pats.find(".", pos);
    if(found != std::string::npos)
    {
        positions.push_back(found);
    }
    pos = found+1;
}

for(int i = 0; i &lt; positions.size(); i++)
{
    std::cout&lt;&lt;pats.substr(positions[i]+1, pats.find_first_of(".", positions[i])-1)&lt;&lt;endl;
}

我知道它会弄乱 x,因为它后面有一个分号而不是句号,但我不明白为什么它也会弄乱位置,请帮助:)

问候, 丹妮

【问题讨论】:

    标签: c++ string c++11 vector substring


    【解决方案1】:

    没关系,我很愚蠢。我读错了子字符串函数,并认为我必须给出结束位置而不是大小。

        std::vector<std::size_t> positions;
        std::string pats = "GameObject.transform.position.x; var a=10;";
        std::size_t pos = 0;
    
        while(pats.find(".", pos) != std::string::npos)
        {
            std::size_t found = pats.find(".", pos);
            if(found != std::string::npos)
            {
                //std::cout<< pats.substr(found+1)<<endl;
                positions.push_back(found);
            }
            pos = found+1;
        }
    
        for(int i = 0; i < positions.size(); i++)
        {
            std::size_t start_pos = positions[i]+1;
            std::size_t end_pos = pats.find_first_of(".", positions[i]+1);
            std::cout<<pats.substr(start_pos, end_pos-start_pos)<<endl;
        }
    

    【讨论】:

      猜你喜欢
      • 2011-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-15
      • 2011-04-25
      相关资源
      最近更新 更多