gpt4 book ai didi

C++ cout 在删除换行符后错误地打印字符串?

转载 作者:行者123 更新时间:2023-11-27 23:48:34 32 4
gpt4 key购买 nike

我有一个多行字符串:

123 456 7
8910

例如。我删除了函数 int clean(string& text); 中的所有换行符 '\n' 并使用 cout 在 main 中打印字符串。结果是:

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

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

最佳答案

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

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

关于C++ cout 在删除换行符后错误地打印字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48566646/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com