我正在尝试编写一个算法,该算法将接受一个字符串并找到其中的单个单词,然后将该单词推送到一个向量中。
void setChar(string s)
{
{
int i = 0;
while(i != s.size())
{
while( i != s.size() && isspace(s[i]))
i++;
int j = i;
while(j != s.size() && !isspace(s[j]))
j++;
if(i != j)
{
words.push_back(s.substr(i, j));
cout<<"Successfully stored the word "<<s.substr(i, j)<<endl;
i = j;
}
}
return;
}
}
算法运行,但给了我奇怪的结果。当我输入字符串“乌龟很开心”时,我得到:
成功存储了
这个词成功存储单词turtle是
成功存储这个词很开心
成功存储了这个词非常快乐
成功存储了单词happy
我试过调试它,但一切看起来都不错。我跟踪i / j变量,他们正在为子字符串找到正确的索引。知道为什么我会得到这些结果吗?
答案 0 :(得分:2)
words.push_back(s.substr(i, j-i));
cout<<"Successfully stored the word "<<s.substr(i, j-i)<<endl;
这是你的错误。你找到了正确的位置,但你得到了子串错误。当获得子串时,Chang j到j-i。
答案 1 :(得分:2)
substr
的第二个参数是要采用的字符数,而不是最后一个字符的索引。要获得所需的结果,您应该使用s.substr(i, j-i)