输入含多种空白字符时如何一次性读取全部内容?getline仅读单行
C++读取包含换行等空白字符的全部输入到单个字符串
你当前的getline(cin, str)只会读取到第一个换行符为止,所以只能获取第一行内容。要读取所有输入内容,分两种场景处理:
1. 读取到输入流结束(EOF)
当输入没有明确终止标记,需要读取用户输入的所有内容直到结束(比如Unix下按Ctrl+D,Windows下按Ctrl+Z),可以用以下两种方式:
方式一:循环逐行拼接
这种方式可以灵活控制是否保留换行符:
#include <iostream> #include <string> using namespace std; int main() { string fullStr; string line; // 循环读取每一行,直到输入流结束 while (getline(cin, line)) { fullStr += line + '\n'; // 保留每行的换行符,若不需要可去掉+'\n' } // 移除最后多余的换行符(如果存在) if (!fullStr.empty()) { fullStr.pop_back(); } cout << fullStr; return 0; }
方式二:直接读取整个流缓冲区
这种方式更简洁,会一次性读取所有字符(包括换行、空格等所有空白):
#include <iostream> #include <string> #include <iterator> using namespace std; int main() { // 用流迭代器读取整个输入流到字符串 string fullStr((istreambuf_iterator<char>(cin)), istreambuf_iterator<char>()); cout << fullStr; return 0; }
2. 读取到指定终止符(如示例中的"END")
如果输入以特定字符串(比如"END")作为结束标记,可在循环中判断终止条件:
#include <iostream> #include <string> using namespace std; int main() { string fullStr; string line; while (getline(cin, line)) { // 读到"END"时停止读取 if (line == "END") { break; } fullStr += line + '\n'; } if (!fullStr.empty()) { fullStr.pop_back(); } cout << fullStr; return 0; }
内容的提问来源于stack exchange,提问作者berke
相关产品推荐
相关产品推荐

