将字符串文件存储到动态数组中

store the string file into dynamic array

本文关键字:动态 数组 存储 字符串 文件      更新时间:2023-10-16

我有三个字符串文件将存储在动态数组中,但我只尝试三个文件中的一个来测试这是否成功,所以我将做同样的方式来处理我拥有的三个文件。我将向 ListView 显示我从文件获得的字符串的目标这是我的代码。

void __fastcall TFrmNewPeta::showDefaultRute() {
    std::string lineDataAwal;
    std::ifstream ifs_Awal;
    int tempIndexAwal = 0;
    ifs_Awal.open("DefaultDataAwal");
        /*counting the line*/
        while(std::getline(ifs_Awal,lineDataAwal)){++tempIndexAwal;}
        /*use dynamic array to stored string*/    
        std::string *s = new std::string[tempIndexAwal];
        for(int dx=0;dx<tempIndexAwal;dx++)
        {
            while(std::getline(ifs_Awal,lineDataAwal))
          s[dx] = lineDataAwal[dx++];
        }
        for(int dex =0;dex<tempIndexAwal;++dex)
        {
           ItemDefult = ListView1->Items->Add();
           ItemDefult->Caption = String(IntToStr(dex + 1));
           ItemDefult->SubItems->Add(s[dex].c_str());
        }
        ifs_Awal.close();
    delete []s;
    s = NULL;
}

编译过程中没有错误,但结果 ListView 仅显示带有此代码的数字ItemDefult->Caption = String(IntToStr(dex + 1));谁能告诉我我最好的方法。

您正在读取文件,使其保持打开状态,并希望再次读取它。 这是行不通的,因为文件中的光标位于文件的末尾(因此您的第二个 while 循环不执行任何操作)。

更好的方法是:

std::vector<std::string> lines;
std::string line;
std::ifstream fin("Youfilename");
while (std::getline(fin, line))
{
    lines.push_back(line);
}
fin.close();
// add data to your list view

如果您将 std::vector 用于动态数组并且不要忘记首先将文件头包含在 #include<vector>

void __fastcall TFrmNewPeta::showDefaultRute() {
    std::string lineDataAwal;
    std::ifstream ifs_Awal;
    std::vector<std::string> vec;
    ifs_Awal.open("DefaultDataAwal");
   /*get the string of lineDataAwal */
    while(std::getline(ifs_Awal,lineDataAwal))
    { vec.push_back(lineDataAwal);}
    for(int dex =0;dex<vec.size();++dex) 
    {
      ItemDefult = ListView1->Items->Add();
      ItemDefult->Caption = String(IntToStr(dex + 1));
      ItemDefult->SubItems->Add(vec.at(dex).c_str()); 
    }
   ifs_Awal.close();
}

希望这有帮助