我想要的只是一个c ++程序,它将读取一个txt文件,将每一行放入一个数组中,然后将一个副本打印到另一个txt文件中。这是我的代码......
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main ()
{
string STRING ="";
string list[10000];
int i = 0;
ifstream infile;
infile.open ("C:/Users/Ryan/Desktop/data.txt");
ofstream myfile;
myfile.open ("C:/Users/Ryan/Desktop/data-2.txt");
while(!infile.eof()) // To get you all the lines.
{
getline(infile,STRING);
list[i]=STRING;
myfile<<list[i];
++i;
}
infile.close();
myfile.close();
return 0;
}
出于某种原因,尽管如此,每一行都给了我一堆时髦的中国符号。这是我的data.txt ...
BPC 20101206 V 0.13 0.13 0.13 0
BPC 20101207 V 0.13 0.13 0.13 6500
BPC 20101208 V 0.13 0.13 0.13 0
BPC 20101209 V 0.13 0.125 0.125 117000
BPC 20101210 V 0.125 0.125 0.125 0
BPC 20101213 V 0.125 0.125 0.125 0
BPC 20101214 V 0.13 0.13 0.13 5000
BPC 20101215 V 0.13 0.13 0.13 290
BPC 20101216 V 0.125 0.115 0.115 24000
这是输出数据-2.txt ...
BPC 20101206 V 0.13 0.13 0.13 0
䈀倀䌀ऀ㈀ ㈀ 㜀ऀ嘀ऀ ⸀㌀ऀ ⸀㌀ऀ ⸀㌀ऀ㘀㔀 ഀ BPC 20101208 V 0.13 0.13 0.13 0
䈀倀䌀ऀ㈀ ㈀ 㤀ऀ嘀ऀ ⸀㌀ऀ ⸀㈀㔀ऀ ⸀㈀㔀ऀ㜀 ഀ BPC 20101210 V 0.125 0.125 0.125 0
䈀倀䌀ऀ㈀ ㈀㌀ऀ嘀ऀ ⸀㈀㔀ऀ ⸀㈀㔀ऀ ⸀㈀㔀ऀ ഀ BPC 20101214 V 0.13 0.13 0.13 5000
䈀倀䌀ऀ㈀ ㈀㔀ऀ嘀ऀ ⸀㌀ऀ ⸀㌀ऀ ⸀㌀ऀ㈀㤀 ഀ BPC 20101216 V 0.125 0.115 0.115 24000
有什么想法吗?
答案 0 :(得分:4)
要解决您的原始问题,您似乎正在输出一些未格式化的字符(恰好是中文)。我没有看到你插入新行(但输出中似乎有新的行)所以你的代码中缺少一些你没有向我们展示的东西。 请剪切/粘贴真实代码。
永远不要这样做:
while(!infile.eof())
在使用之前,您应该阅读并测试线路 这可以通过将读取放入条件来完成:
while(getline(infile,STRING))
{
list[i]=STRING;
myfile<<list[i];
++i;
}
在一行中声明并打开文件
ifstream infile("C:/Users/Ryan/Desktop/data.txt");
不要测试EOF作为循环路径。
不要手动关闭文件(让析构函数执行)
答案 1 :(得分:3)
如果我没弄错,你的操作系统是Windows?
这些“中文”符号的原因是您的.txt文件是用Unicode编码的。在记事本中单击“另存为”,然后在“编码”下拉列表(对话框底部的某个位置)中选择ANSI,然后保存。这应该解决“中国”问题:)
检查其他答案以解决代码问题。希望有所帮助。
答案 2 :(得分:1)
当您回写数据时,您不包括换行符,因此如果您打算这样做,则不会创建重复的文件。
似乎没有理由拥有List []数组,因为你无论如何直接写回来,而不是你可以做
getline(infile,STRING);
myfile << STRING << endl;
btw STRING不是一个好的变量名,请选择更具描述性的内容。
答案 3 :(得分:1)
这篇文章详细介绍了while(!eof)... here
的替代方法