【发布时间】: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 < positions.size(); i++)
{
std::cout<<pats.substr(positions[i]+1, pats.find_first_of(".", positions[i])-1)<<endl;
}
我知道它会弄乱 x,因为它后面有一个分号而不是句号,但我不明白为什么它也会弄乱位置,请帮助:)
问候, 丹妮
【问题讨论】:
标签: c++ string c++11 vector substring