关于控制台输入string的有关问题
关于控制台输入string的问题cin的string是以空格结尾的, 所以没法将带有空格的字符串通过cin的形式在控制
关于控制台输入string的问题
cin的string是以空格结尾的, 所以没法将带有空格的字符串通过cin的形式在控制台里赋值给某个string类型的变量。虽然可以用getline()函数来部分解决这个问题,但是碰到那种比一行更长,或者多行形式的长字符串,那又不好处理了。
那么,怎么样实现这样的功能,就是在控制台里可以输入任意长短的字符串(可以带空格;以某个特定的操作,比如Ctrl+Z终止),将其赋给某个string变量? string 控制台
[解决办法]
这个问题其实与cin无关,cin背了黑锅,这种误解是对iostream缺乏足够了解导致的。
真正原因在于>>抽取运算符,>>抽取符是格式化输入,其规则是输入字符时以空白字符及\t为分隔符。
解决办法是,改用流迭代器,这时就可以读取到空格,同时,由于cin默认使用skipws删除前导空格,所以还需要noskipws,代码如下:
std::string str( std::istream_iterator< char >( std::cin >> std::noskipws ), std::istream_iterator< char >() );
[解决办法]那么长的string为什么非要用控制台呢,真是的
[解决办法]等待特定ctrl+z作为结束标志?
string& inputString(string& s)
{
s.clear();
string part;
while(cin >> part) s.append(part);//遇到“单独的”ctrl+z时循环停止
return s;
}
[解决办法]+1
[解决办法]getline操作的是string,又不会因为buffer不够停下来。
[解决办法]+1
[解决办法]晕,竟然忘了string还有个古老的getline,这个getline早在STL收入C++标准前就有了,它可以把空白字符也视作正常字符,如下两行代码就行:
std::string str;
getline( std::cin, str );