我正在尝试对字符串中的单个单词进行处理。我读了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;
}
答案 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;
}