gpt4 book ai didi

C++ getline 和 append

转载 作者:行者123 更新时间:2023-11-30 05:45:54 28 4
gpt4 key购买 nike

我正在尝试编写一个非常简单的程序,逐行读取其标准输入(直到“end”出现在一行的开头)。同时,它尝试构造一个包含所有行的串联的新字符串。

这种行为非常令人费解。这些行被正确读取(如 cout << current << endl 行所示)。但是,构造的字符串不是我所期望的。相反,它只包含最后一次阅读。但是,如果我更换 construct.append(current)通过 construct.append("foo") , 它工作得很好。

我在这里做错了什么?

#include <iostream>                                                               
#include <string>
#include <cassert>

using namespace std;

int main() {
string construct;
while(true) {
string current;
getline(cin, current);
assert(!cin.eof());
if (current.find("end") == 0) { break; }
cout << current << endl;
construct.append(current);
}
cout << construct << endl;
return 0;
}

编译:

g++ -o main main.cpp -Wall -std=c++0x  

输入:input.txt

abcdef
ghij
end

输出:./main < input.txt

abcdef
ghij
ghijef

如果我键入输入而不是使用文件,它会按预期工作。我也用 gcc (linux) 和 clang (mac os) 得到了相同的结果。

最佳答案

我发现了问题。我的输入文件是带有 CRLF 行终止符的 ascii 文件(我使用的是 mac)。 construct 变量已正确创建,但终端未正确显示。

关于C++ getline 和 append,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29185784/

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