将字符串分解为单独的元素

时间:2014-03-13 04:00:25

标签: c++ algorithm

我正在尝试编写一个算法,该算法将接受一个字符串并找到其中的单个单词,然后将该单词推送到一个向量中。

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变量,他们正在为子字符串找到正确的索引。知道为什么我会得到这些结果吗?

2 个答案:

答案 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)