使用getline()忽略空白/制表符/换行符
Ignoring whitespaces/tabs/newlines with getline()
我在网上找了很多资料,但还是找不到这个。我不明白是怎么回事Std::skipws可以忽略空格、制表符和换行符。
下面是我的简单代码vector<string> vec;
while(1){
getline(cin, s);
if( s.compare("#") == 0)
break;
else
vec.push_back(s);
}
我将输入一行带有换行符、空格和制表符的字符串。输入后,我想将字符串存储到向量中,当遇到"#"字符串时,这将停止。我尝试了上面的代码,但它将空间与矢量中的字符串一起存储,尽管它在输入"#"后终止。
std::getline
的目的是将整行(包括空格)读入字符串缓冲区。
如果您想从流中读取令牌,跳过空白,则使用标准输入操作符>>
。
std::vector<std::string> vec;
std::string s;
while(std::cin >> s && s != "#") {
vec.push_back(s);
}
<<p> 生活例子/strong> std::skipws
仅跳过任何输入流中的前导空格字符。因此,它对第一个非空白之后的所有空白都没有影响。如果您想用getline(cin, s)
读取整行,您不妨考虑在将字符串压入容器之前删除已从字符串中读取的空白和制表符,如下所示:
while (1){
getline(cin, s);
if (s.compare("#") == 0) {
break;
}
else {
s.erase(remove_if(s.begin(), s.end(), ::isspace), s.end());
vec.push_back( s );
}
}
关于如何从字符串中删除空格的讨论参见:从std::string中删除空格
相关文章:
- 无法通过空白将文本文件行分隔为矢量
- 由cin中的字符串中未捕获空白引起的分割错误
- 尝试从 XamlApplication 编译 C++/WinRT 空白应用程序时,我收到未解析的外部符号 winrt_make_*
- 代码精简版页面变为空白
- 读取制表符分隔的文件时出现问题 C++
- 在OpenCV C++中创建空白图像
- Gtkmm 窗口为空白,不显示任何小部件或标题
- 我如何使它,无论用户用空白字符串按 Enter 多少次,它总是打印"开始"字符串?
- 如何插入 4 个空格宽的制表符并将它们删除两个空格?
- OpenGL - 添加第二个着色器属性会导致空白屏幕
- 防止控制台在通道字符(在 c++ 中)中输入空格(即空格、制表符和换行符)
- 对象数组打印空白字符串
- 如何在c++中读取do-while循环中的空白
- C++缓冲区是如何工作的(关于空白)
- Shell_NotifyIcon在系统托盘中创建空白、无响应的图标
- 我需要帮助修复C++空白检测器
- 接受 istream 的空白值
- 如何检查字符串是否包含空格/制表符/换行符(任何空白内容)?
- 在c++中使用regex读取空白,新行和制表符
- 使用getline()忽略空白/制表符/换行符