4

我想要的只是一个 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

这是输出 data-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

有任何想法吗?

4

4 回答 4

4

为了解决您最初的问题,您似乎正在输出一些未格式化的字符(恰好是中文)。我没有看到您插入新行(但输出中似乎有新行),因此您的代码中缺少一些您没有向我们展示的内容。请剪切/粘贴真实代码

  1. 什么是真正的代码。
  2. 你如何从文件中生成输出(是不是你在编辑器中打开了它)?

主要注意事项:

永远不要这样做:

   while(!infile.eof())

在使用它之前,您应该阅读并测试该行。
这可以通过将读取放入条件中来在一行中完成:

    while(getline(infile,STRING))
    {
        list[i]=STRING;
        myfile<<list[i];
        ++i;
    }

其他需要注意的事项:

  1. 很好地格式化你的代码!!!!!!
  2. 不要使用全部大写的标识符(这些通常是为宏保留的)。
  3. 不要使用数组。请改用 std::vector 。
  4. 在一行中声明和打开文件

    ifstream infile("C:/Users/Ryan/Desktop/data.txt");
    
  5. 不要测试 EOF 作为循环条件。

    • 如果还有其他问题,它可能会导致无限循环。
    • 如果您不检查读取是否有效,则重复最后一行的处理。
  6. 不要手动关闭文件(让析构函数来做)

于 2011-12-06T11:46:00.717 回答
3

如果我没记错的话,你的操作系统是 Windows 吗?

这些“中文”符号的原因是您的 .txt 文件是用 Unicode 编码的。在记事本中打开它,单击另存为,然后在编码下拉列表(对话框底部的某处)中选择 ANSI,然后保存。那应该解决“中文”问题:)

检查其他答案以解决您的代码问题。希望有帮助。

于 2011-12-06T12:05:22.143 回答
1

当您写回数据时,您不包括换行符,因此如果这是您的意图,则不会创建重复文件。

似乎没有理由拥有 List[] 数组,因为无论如何你都是直接写回它,而不是你可以这样做

getline(infile,STRING);
myfile << STRING << endl;  

顺便说一句,STRING 不是一个好的变量名,请选择更具描述性的名称。

于 2011-12-06T11:44:59.113 回答
1

这是一篇不错的文章,详细介绍了 while(!eof)... 的替代方法...

于 2011-12-06T11:48:36.480 回答