在字符串中查找代码 我正在研究一个C++项目,该脚本采用脚本,用HTML跨度突出文本并在GTKMM窗口中输出。我有它的工作,但我想做一个算法,注册代码,而不是使用一个向量的关键字。 (我知道有很多网站和东西可以帮我做,但我只想做这个软件)

在字符串中查找代码 我正在研究一个C++项目,该脚本采用脚本,用HTML跨度突出文本并在GTKMM窗口中输出。我有它的工作,但我想做一个算法,注册代码,而不是使用一个向量的关键字。 (我知道有很多网站和东西可以帮我做,但我只想做这个软件),c++,string,c++11,vector,substring,C++,String,C++11,Vector,Substring,我现在正在努力突出显示UnityC,我自己和我的编码老师似乎无法解决一个问题。(我的老师没有花几个小时来检查出了什么问题,但我们已经检查了一段时间) 我寻找所有的周期,把它们放在一个向量中,然后我循环遍历这个向量,试图得到正确的子串。我在句点+1的位置开始子字符串,所以我不包括句点。然后我想在下一个句点出现时结束子字符串,所以我检查它何时找到从单词开头开始的另一个句点。第一次工作时打印“transform”,第二次打印“position.x;var a=1”,第三次打印“x;var a=10;”

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

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

std::向量位置;
std::string pats=“GameObject.transform.position.x;var a=10;”;
标准:尺寸\u t位置=0;
while(pats.find(“.”,pos)!=std::string::npos)
{
std::size\u t found=pats.find(“.”,pos);
如果(找到!=std::string::npos)
{
位置。推回(找到);
}
pos=found+1;
}
对于(int i=0;i positions.size();i++)
{
std::coutpats.substr(位置[i]+1,pats.find_first_of(“.”,位置[i])-1)endl;
}
我知道它会在x上弄乱,因为它后面有一个分号而不是句号,但我不明白为什么它也会弄乱位置,请帮助:)

问候,,
丹尼

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

    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;
    }
std::向量位置;
std::string pats=“GameObject.transform.position.x;var a=10;”;
标准:尺寸\u t位置=0;
while(pats.find(“.”,pos)!=std::string::npos)
{
std::size\u t found=pats.find(“.”,pos);
如果(找到!=std::string::npos)
{
//标准::cout
    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;
    }