删除换行符后C ++ cout打印字符串不正确?

时间:2018-02-01 15:45:54

标签: c++ string cout

我有一个多行字符串:

  

123 456 7
  8910

例如,

。我删除了所有新行字符' \ n'在函数int clean(string& text);中,使用cout在主函数中打印字符串。结果是:

  

8910456 7

我知道我的功能有效"对"因为str.substr(0, 5)的结果是:

  

123 4

另外,我正确地通过cout打印了另一个多行字符串,因此cout正常工作。还包括stringiostream个库。

int clean(string& text) {
    //...
    text.erase(std::remove(text.begin(), text.end(), '\n'), text.end());
    return 0;
}

int main() {
    string t1;
    string name1 = "../test.txt";
    try {
        t1 = readBlock(name1);
        cout << t1 << endl;
    } catch(exception &e) {
        cout << e.what();
    }
    cout << "Size: " << t1.size() << endl;
    clean(t1); //Here
    cout << t1 << "\n";
    return 0;
}

其他删除换行符的方法,例如将除换行符之外的每个字符添加到新字符串中,都会产生相同的结果。我做错了什么?

1 个答案:

答案 0 :(得分:3)

您的行结尾(我从您的结果推断)实际上是\r\n,而不仅仅是\n。这是一个回车字节,后跟一个换行字节。

然后输出第一行到cout,将字符串输出到控制台。然后,您将按下回车符(\r)字节,当输出到控制台时,将光标放回到行的开头。然后第二行输出到控制台,但仍在同一行,并打印在现有文本的顶部。