在字符串中查找下一个单词

时间:2014-09-11 16:44:11

标签: c++ string find word

我正在尝试对字符串中的单个单词进行处理。我读了mulitworded字符串,并希望使用string :: size_type跟踪它,希望代码非常自我解释。

现在我无法想到一种方法可以将p1推进到第一个循环后的下一个单词的开头。 我陷入了无限循环。

#include <iostream>
#include <string>

using namespace std;

static string NextWord(string &S, string::size_type &p1, string::size_type &p2)
{
    static char delimiters[] = " \n\t";
    string re = "none";

    p1 = S.find_first_of(S, p1);
    p2 = S.find_first_of(delimiters, p1);
    re = S.substr(p1, (p2 - p1));

    if (p1 == string::npos)
        return string("");

    return re;
}

int main() {
    string word, test = "I like pie and men are cool but what????";
    string::size_type   p1 = 0,
                        p2 = 0;

    while (p1 != string::npos)
    {
        word = NextWord(test, p1, p2);

        if (p1 == string::npos) {
            break;
        }

        cout << word << endl;
        p1 = p2;
    }

    system("pause");
    return 0;
}

1 个答案:

答案 0 :(得分:1)

这两条评论已经说明了如何使用std库。但是你的代码将p1设置为NextWord每次传递中的下一个非分隔符。

static string NextWord(string &S, string::size_type &p1, string::size_type &p2)
{
    static char delimiters[] = " \n\t";
    string re;

    p1 = S.find_first_not_of(delimiters, p1)
    if (p1 == string::npos) 
        return "";
    p2 = S.find_first_of(delimiters, p1);
    re = S.substr(p1, (p2 - p1));

    return re;
}