使用noskipws从ifstream读取字符串时清空字符串

时间:2011-12-25 21:57:34

标签: c++ gcc

最初问here

如果我使用以下代码向“cin”发送“Hello world”...

string str,msg;
getline(cin,str);
stringstream ss(str);
char c;
while(ss >> noskipws >> c)
    msg += c;

...结果为msg = "Hello World"

但如果我使用string c代替char c,则msg为空。

我正在编译: gcc(Ubuntu 4.4.3-4ubuntu5)4.4.3

为什么我会得到一个空字符串?

1 个答案:

答案 0 :(得分:4)

这是一个有趣的quote from cplusplus.com

  

请注意,许多提取操作将空格本身视为终止字符,因此,禁用skipws标记,某些提取操作可​​能不会从流中提取任何字符

如果要将标记提取为字符串,请删除noskipws

通常,您应该仔细考虑,然后坚持{基于行,基于令牌或基于字符}的提取之一。