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

时间:2013-10-05 23:17:26

标签: c++ dynamic-arrays

我有三个字符串文件将存储到动态数组中,但我只是尝试三个文件中的一个来测试这是否成功,所以我将以同样的方式处理我拥有的三个文件。 目标我将显示从文件到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));的数字 任何人都可以告诉我如何做到最好的方式。

2 个答案:

答案 0 :(得分:3)

您正在阅读该文件,将其保持打开状态,并希望再次阅读该文件。这是行不通的,因为文件中的光标位于文件的末尾(所以你的第二个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

答案 1 :(得分:1)

如果你将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();
}

希望这有帮助