在字符串中查找代码

时间:2017-03-22 13:09:13

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

我正在开发一个带有脚本的c ++项目,用html spans突出显示文本并在GTKMM窗口中输出。我有它工作,但我想制作一个注册代码而不是使用关键字矢量的算法。 (我知道有网站和东西要为我做,但我只是想制作这个软件。)

我现在正致力于突出UnityC#,我自己也遇到了一个问题,我的编码老师似乎无法修复。 (我的老师没花几个小时检查出了什么问题,但我们已经看了一会儿。)

我查找所有句点并将它们放在向量中,然后我遍历向量并尝试获取正确的子字符串。我在句号+ 1的位置开始子串,所以我不包括句点。然后我想在下一个句点到来时结束子字符串,所以我检查它何时找到从单词开头开始的另一个句点。它第一次工作并打印"转换",但它第二次打印" 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,因为它背后有一个分号而不是句号,但我不明白为什么它会弄乱这个位置,请帮忙:))

此致 达尼

1 个答案:

答案 0 :(得分:0)

没关系,我真是个傻瓜。我读错了子串函数,并认为我必须给出结束位置而不是大小。

    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;
    }