gpt4 book ai didi

c++ - 从我的二维数组中的一列返回的字符串值被压缩成一个字符串(在 Mac 操作系统上打开 Windows txt 文件)

转载 作者:行者123 更新时间:2023-11-28 01:15:42 26 4
gpt4 key购买 nike

有人给了我一个 52 行的文本文件,并告诉我读取该文件,将值存储到一个数组中,然后在一行中返回该数组中的值以模拟专辑。

文本文件“cd.txt”中的行:

Pantera
Cowboys From Hell
1990
Megadeath
Rust in Peace
1990
Anthrac
Worship Music
2011

显示文件内容的代码:

void displayCollection()
{
string album[17][3], myArray[52];
string line;
int loop = 0, loop1 = 0, loop2 = 1, loop3 = 2;
ifstream myfile("cd.txt");

while (getline(myfile, line)){
myArray[loop] = line;
loop += 1;
}
myfile.close();

cout << "\nArtist\t\t\tTitle\t\t\tYear\n" << endl;
for (int i = 0; i < 17; i++){
album[i][0] = myArray[loop1];
album[i][1] = myArray[loop2];
album[i][2] = myArray[loop3];

cout << album[i][0] << album[i][1] << album[i][2] << endl;

loop1 += 3;
loop2 += 3;
loop3 += 3;
}

}

格式应该如何打印:

Artist         Title                Year
Pantera Cowboys From Hell 1990
Megadeath Rust in Peace 1990
Anthrac Worship Music 2011

实际打印的内容:

Artist         Title                Year
1990oys From Hell
1990 in Peace
2011hip Music

最佳答案

鉴于症状和您的代码,这只能由文件编码引起,更准确地说是line break encoding。 :

  • 很有可能你有一个 windows 文件,其行以 CR+LF 结尾,但你在 linux 系统上阅读它,它解析为和行尾仅为 LF。
  • 如果您使用 binary mode instead of text mode 读取一个 Windows 生成的文件,同样的情况也会发生。 .但是在您的代码中情况并非如此。

因此,您的每个字符串都有一个尾随 CR 字符(即“\r”,即 0x0D)。显示它会使光标移动到行的开头,以便下一个字符串覆盖前一个字符串。当然,当您使用 endl 时,您会跳转到下一行。

解决方案:去除尾随的 0x0D:

while (getline(myfile, line)){
if (line.length()>0 && line[line.length()-1]=='\r')
line.pop_back();
myArray[loop] = line;
loop += 1;
}

关于c++ - 从我的二维数组中的一列返回的字符串值被压缩成一个字符串(在 Mac 操作系统上打开 Windows txt 文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58793538/

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