C++:为什么 getline() 不打印输入字符串的最后一个字?
C++: Why won't getline() print the last word of the input string?
我正在尝试让我的程序读取一个字符串,然后在单独的一行上输出每个单词。当我调用这个函数时,它并没有打印句子的最后一个词。我一直没能找到这个问题的答案。
例如:
Input:
Hello there my friend
Output:
Hello
there
my
这是我的代码:
istream& operator >> (istream& in, FlexString& input) {
std::string content;
while (std::getline (in,content,' ')) {
cout << content << endl;
}
return in;
}
我是 C++ 的新手,所以这可能很愚蠢,但我尝试在 while 循环之后的下一行添加另一个 cout
调用以打印 content 但是由于某种原因它不会打印它。
getline
没有跳过最后一个字。它还在等你完成它。您选择 space 字符 (' '
) 作为分隔符,因此 getline 将读取直到找到 space(不是制表符或换行符),或者直到输入流结束.您的循环也不会像您预期的那样在行尾停止。它将继续阅读直到流结束。
如果您想读取一行,然后逐字分隔该行,则只需调用 getline
一次,使用 \n
定界符(默认)。然后使用 istringstream
逐字分隔结果字符串。
std::string line;
std::getline(in, line);
std::istringstreaam iss(line);
std::string content;
while (iss >> content)
std::cout << content << std::endl;
我正在尝试让我的程序读取一个字符串,然后在单独的一行上输出每个单词。当我调用这个函数时,它并没有打印句子的最后一个词。我一直没能找到这个问题的答案。
例如:
Input:
Hello there my friend
Output:
Hello
there
my
这是我的代码:
istream& operator >> (istream& in, FlexString& input) {
std::string content;
while (std::getline (in,content,' ')) {
cout << content << endl;
}
return in;
}
我是 C++ 的新手,所以这可能很愚蠢,但我尝试在 while 循环之后的下一行添加另一个 cout
调用以打印 content 但是由于某种原因它不会打印它。
getline
没有跳过最后一个字。它还在等你完成它。您选择 space 字符 (' '
) 作为分隔符,因此 getline 将读取直到找到 space(不是制表符或换行符),或者直到输入流结束.您的循环也不会像您预期的那样在行尾停止。它将继续阅读直到流结束。
如果您想读取一行,然后逐字分隔该行,则只需调用 getline
一次,使用 \n
定界符(默认)。然后使用 istringstream
逐字分隔结果字符串。
std::string line;
std::getline(in, line);
std::istringstreaam iss(line);
std::string content;
while (iss >> content)
std::cout << content << std::endl;