最初问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
为什么我会得到一个空字符串?
答案 0 :(得分:4)
这是一个有趣的quote from cplusplus.com:
请注意,许多提取操作将空格本身视为终止字符,因此,禁用skipws标记,某些提取操作可能不会从流中提取任何字符。
如果要将标记提取为字符串,请删除noskipws
。
通常,您应该仔细考虑,然后坚持{基于行,基于令牌或基于字符}的提取之一。