从我的2d数组中的一列返回的字符串值被压缩为一个字符串(在Mac os上打开Windows txt文件)
Returning string values from a column in my 2d array are being compressed into one string (opening Windows txt file on Mac os)
我得到了一个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 << "nArtisttttTitletttYearn" << 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
鉴于症状和您的代码,这只能由文件编码引起,更确切地说是换行编码:
- 很有可能你有一个windows文件,行以CR+LF结尾,但你在linux系统上阅读它,该系统只解析行的末尾为LF
- 如果您使用二进制模式而不是文本模式读取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++中
- 有没有办法从非C/C++文件中读取C++原始字符串文字的内容
- 如何打开并写入一个名称取自C++中字符串的文件
- 如何从二进制文件中读取字符串
- 如何在 c++ 中使用 getline 从文件中读取字符串?
- 将字符串与文件上的数据进行比较
- 用户输入字符串的文件附加问题..C++
- 如何从文件中读取两个字符串和数字数组,并将它们存储在对象向量中
- 如何使字符串出现在编译的二进制可执行文件的开头?
- 使用文件内容作为硬编码字符串
- 将文件复制到自定义位置,存在字符串转换问题
- 将二进制字符串/文件内容从 c++ 传递到节点 js
- 在字符串.h文件中调用函数而不带对象
- 将带有引号和逗号的字符串文件读入字符串数组
- 如何从字符串/文件中分离字符和整数
- 将字符串文件存储到动态数组中
- 如何用C++将字符串文件Txt解析成数组
- 如何用Boost::Spirit解析复杂的字符串文件
- 如何从C语言的第二行读取字符串文件
- 一个很好的性能替代PHP-字符串/文件操作