我在网上经历了很多资源,但仍无法得到这些资源。我不明白怎么做 std :: skipws可以忽略空格,制表符和换行符。
以下是我的简单代码
vector<string> vec;
while(1){
getline(cin, s);
if( s.compare("#") == 0)
break;
else
vec.push_back(s);
}
我将输入一行字符串,其中包含换行符,空格和制表符。输入后我想将字符串存储到向量中,并在遇到“#”字符串时停止。我尝试使用上面的代码,但它会在向量中存储空格以及字符串,尽管它在“#”之后终止。
答案 0 :(得分:2)
std::getline
的目的是将整行(包括空格)读入字符串缓冲区。
如果要从流中读取标记,跳过空格,请使用标准输入运算符>>
。
std::vector<std::string> vec;
std::string s;
while(std::cin >> s && s != "#") {
vec.push_back(s);
}
答案 1 :(得分:0)
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 );
}
}
有关如何从字符串中删除空格的讨论,请参阅:Remove spaces from std::string in C++