我正在开发一个带有脚本的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 < positions.size(); i++)
{
std::cout<<pats.substr(positions[i]+1, pats.find_first_of(".", positions[i])-1)<<endl;
}
我明白它会搞乱x,因为它背后有一个分号而不是句号,但我不明白为什么它会弄乱这个位置,请帮忙:))
此致 达尼
答案 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;
}