C ++ std :: ifstream读取字符串分隔符

时间:2011-05-23 08:31:08

标签: c++ string ifstream c++-standard-library

使用时:

string s;
cin >> s;

哪些字符可以包含字符串以及哪些字符会将读取停止为字符串。

2 个答案:

答案 0 :(得分:9)

std::ctype_base::spacestd::istream的分隔符,它会停止从源中读取更多字符。

std::ctype_base::space指的是空格和换行符。这意味着,s在使用cin>>s阅读时可以包含除空格和换行符之外的任何字符。

如果你想阅读包含空格的完整行,那么你可以使用getline()函数,它使用换行符作为分隔符。还存在其重载函数,如果要提供自己的分隔符,可以使用它。 See it's documentation for further detail


您还可以使用自定义区域设置,您可以将其设置为std::istream。您的自定义区域设置可以定义一组字符,以便std::istream将其视为分隔符。你可以在这里看到一个这样的例子(见我的解决方案):

Right way to split an std::string into a vector<string>

答案 1 :(得分:3)

分隔符是ch返回true的任何字符std::isspace( ch, std::sin.getlocale() )。换句话说,无论如何 充满感染的地方认为是“白色空间”。 (虽然我愿意 考虑到它有点滥用,我知道程序员要创建 特殊区域设置,例如,白色空间,并使用 >>读取以逗号分隔的列表。)