防止在我的C ++行结束时打印额外的空格

时间:2016-06-02 20:31:24

标签: c++ whitespace cout cin

所以我通过

接受输入
string input,word;
while(getline(cin, input)) {
 stringstream ss; 
 ss<<input
 while(ss >> word)
 ...

并打印我想要的东西     cout <<word<<" ";

然而,当我这样做时,它会在每行的末尾创建一个额外的空格,我不想要这样做。如果我不把那个空格放在那里,当我打印出来时,单词之间就没有空格了。是否有一种更简单的方法来管理我想要的单词,以便它们自动间隔?我可以做些什么来阻止每行末尾的额外空格。

3 个答案:

答案 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;
}