所以我通过
接受输入string input,word;
while(getline(cin, input)) {
stringstream ss;
ss<<input
while(ss >> word)
...
并打印我想要的东西
cout <<word<<" ";
然而,当我这样做时,它会在每行的末尾创建一个额外的空格,我不想要这样做。如果我不把那个空格放在那里,当我打印出来时,单词之间就没有空格了。是否有一种更简单的方法来管理我想要的单词,以便它们自动间隔?我可以做些什么来阻止每行末尾的额外空格。
答案 0 :(得分:3)
测试循环外的第一个单词提取,然后用前导空格继续循环:
std::string input;
while(getline(std::cin, input))
{
std::istringstream ss(input);
std::string word;
if (ss >> word)
{
std::cout << word;
while (ss >> word)
std::cout << ' ' << word;
std::cout << '\n';
}
}
注意:为线路完成添加了换行符。自行决定使用或删除。
答案 1 :(得分:2)
翻转问题。而不是附加一个空格,找出你应该在前置空间的时候。
我这样做的方法是将前缀分隔符初始化为空值,然后在第一个元素之后将其设置为有效的值。在你的情况下,它会是这样的:
const char *delimiter= "";
while(ss >> word)
{
ss >> delimiter >> word;
delimiter= " ";
}
答案 2 :(得分:0)
一个技巧 - 仍然感觉有点令人沮丧 - 在混合中添加一个布尔变量:
bool space = false;
while (ss >> word) {
if (space) {
cout << " ";
} else {
space = true;
}
cout << word;
}