我想用 getline()
循环输入的字符串构建一个字符串
cin >> n;
string all,line;
stringstream ss;
for (int i = 0; i < n; i++)
{
ss.clear();
line.clear();
cin.ignore();
getline(cin, line, '\n');
ss.str(line);
all += ss.str();
}
cout << all << endl;;
我预计:
input:
2
word
word
output:
wordword
我得到的不是这个:
input:
2
word
word
output:
wordord
我找不到解决方案。有人可以帮助我吗?
最佳答案
与 >>>
运算符不同,getline()
使用换行符。然后你的下一次迭代 ignore()
是下一行的 w
。
只需将 ignore
移出循环即可产生所需的结果。
不过,你有点过于复杂了——你不需要通过 stringstream
来“绕道”:
cin >> n;
cin.ignore();
string all;
for (int i = 0; i < n; i++)
{
string line;
getline(cin, line);
all += line;
}
cout << all << endl;
但是,您可以将整个内容累积到一个流中,然后再进行转换(效率更高):
cin >> n;
cin.ignore();
ostringstream all_stream;
for (int i = 0; i < n; i++)
{
string line;
getline(cin, line);
all_stream << line;
}
string all = all_stream.str();
cout << all << endl;
关于c++ - 使用 stringstream 从循环中的另一个字符串构建字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47730285/