将列表(.txt)文件放入2D数组

时间:2019-01-28 04:28:00

标签: c++

我正在尝试分离一个文本文件(具有200个字符串的列表),并将每个其他字符串(列表中的偶数和奇数)存储到2D数组中。

文本文件以这种方式排序(没有数字):

  1. 阿拉巴马州
  2. 布莱顿
  3. 阿肯色州
  4. 百慕大
  5. Averton
  6. 伯明翰

我想将其存储在一个称为strLine [101] [2]的二维数组中,以便对其进行遍历,以便列表中的第一个字符串位于位置[0] [0],列表中的第二个字符串位于位置[0] [1],以此类推,直到文件读完并且列表变成这样(没有数字)为止为止:

  1. 阿拉巴马州 | 布莱顿
  2. 阿肯色州 | 百慕大
  3. Avertinon | 伯明翰

目前,我的代码输出原始未排序列表,我想知道如何实现2d数组(使用正确的语法)以及如何在getline()函数中实现i,j for循环,以便遍历2D数组的每个元素。

任何帮助将不胜感激。

我的代码:

bool LoadListBox()
{

    // Declarations
    ifstream fInput;                                // file handle
    string strLine[201];                            // array of string to hold file data
    int index = 0;                                  // index of StrLine array
    TCHAR szOutput[50];                             // output to listbox, 
    50 char TCHAR

    // File Open Process
    fInput.open("data.txt");                        // opens the file for read only
    if (fInput.is_open())
    {
        getline(                                    // read a line from the file
            fInput,                                 // handle of file to read
            strLine[index]);                    // storage destination and index iterator

        while (fInput.good())                       // while loop for open file
        {
            getline(                                // read line from data file
                fInput,                             // file handle to read
                strLine[index++]);              // storage destination
        }

        fInput.close();                             // close the file
        index = 0;                                  // resets back to start of string

        while (strLine[index] != "")                // while loop for string not void
        {
            size_t pReturnValue;                    // return code for mbstowcs_s

            mbstowcs_s(                             // converts string to TCHAR
                &pReturnValue,                      // return value
                szOutput,                           // destination of the TCHAR
                50,                                 // size of the destination TCHAR
                strLine[index].c_str(),             // source of string as char
                50);                                // max # of chars to copy

            SendMessage(                            // message to a control
                hWnd_ListBox,                       // handle to listbox
                LB_ADDSTRING,                       // append string to listbox
                NULL,                               // window parameter not used
                LPARAM(szOutput));                  // TCHAR to add

            index++;                                // next element of string array
        }
        return true;                                // file loaded okay 
    }
    return false;                                   // file did not load okay
}

1 个答案:

答案 0 :(得分:0)

步骤1

string strLine[201];转换为string place[100][2];。还可以考虑制作

struct place
{
    std::string state;
    std::string city;
};

因为要确切存储的内容稍微明确一些。更具表现力的代码更易于阅读,通常可以防止错误(更难于偶然使用strLine[x][2]之类的东西),并且需要更少的注释。注释本身的代码应该是个人目标。当然,编译器不在乎,但是很少有人是编译器。

步骤2

使用两个单独的index变量。将第一个命名为num_entries,因为它实际上是在计算数组中的项目数。

步骤3

将两行读入内部数组并测试读取结果。如果他们读取成功,则增加index

while (getline(fInput, place[num_entries][0]) && getline(fInput, place[num_entries][1]))
{
    num_entries++;
}

第4步(可选清理)

第2步将while (strLine[index] != "")变成(index < num_entries)

用常量替换所有50。这样一来,您就无法更改值并且错过了几个50,并且从一个好的描述性标识符中推断出的含义比原始数字要容易得多。