我有一个多行字符串:
例如,123 456 7
8910
。我删除了所有新行字符' \ n'在函数int clean(string& text);
中,使用cout
在主函数中打印字符串。结果是:
8910456 7
我知道我的功能有效"对"因为str.substr(0, 5)
的结果是:
123 4
另外,我正确地通过cout
打印了另一个多行字符串,因此cout
正常工作。还包括string
和iostream
个库。
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;
}
其他删除换行符的方法,例如将除换行符之外的每个字符添加到新字符串中,都会产生相同的结果。我做错了什么?
答案 0 :(得分:3)
您的行结尾(我从您的结果推断)实际上是\r\n
,而不仅仅是\n
。这是一个回车字节,后跟一个换行字节。
然后输出第一行到cout
,将字符串输出到控制台。然后,您将按下回车符(\r
)字节,当输出到控制台时,将光标放回到行的开头。然后第二行输出到控制台,但仍在同一行,并打印在现有文本的顶部。