从文本文件中读取行并在C ++中以字符数组存储

时间:2015-11-30 05:47:40

标签: c++

我被困在从文件中读取行并将它们存储在动态字符数组中。这是代码。任何帮助将受到高度赞赏。

Input file:  >sequence1.txt 
             WAWAWAWA

程序应忽略以>开头的行。它确实提供输出WWWWWWWW

while(!rrr.eof())
{     
    rrr.get(ch);
    int j;
    if(ch == '>')
    {
        cout<<ch<< "  ignored "<<endl;
        getline(rrr,line);
    }
    else
    {
        getline(rrr,line);
        j= line.length()+1;
        arr= new char[j];
        for(int i=1; i<=j;i++)
        {
           rrr.get(ch);
           arr[i]=ch;
           cout<<arr[i];
        }
        len=j;
    }

    rrr.get(ch);    
}

2 个答案:

答案 0 :(得分:0)

为了使代码看起来更简单,我会改变这个:

rrr.get(ch);
int j;
if(ch == '>')
{
    cout<<ch<< "  ignored "<<endl;
    getline(rrr,line);
}
else
{
    getline(rrr,line);
    j= line.length()+1;
    arr= new char[j];
    for(int i=1; i<=j;i++)
    {
       rrr.get(ch);
       arr[i]=ch;
       cout<<arr[i];
    }
    len=j;
}

rrr.get(ch);

对此:

getline(rrr, line);

if(line[0] == '>')
{
    cout<<line[0]<< "  ignored "<<endl;
}
else
{
    len = line.length();
    arr= new char[len];
    for(int i=0; i < len; i++)
    {
       arr[i] = line[i];
       cout << arr[i];
    }
}

即使我不确定你为什么需要for循环。而您可以将行值分配或复制到arr!

这个用途的用法不清楚。

答案 1 :(得分:0)

我猜你想要这个...

vector<string> data;
string line;
while( getline(rrr,line))
{     
    if(line[0] == '>')
        cout << "> ignored " << endl;

    else
     data.push_back(line);

}

然后打印数据......

//////////////////////////////////////////

使用动态数组...

    string line;
    int count = 0; // count lines without '>'
    while( getline(rrr,line))
        if(line[0] != '>')
             ++count;


 // return to beg of file
    rrr.clear();
    rrr.seekg(0, ios::beg);


    char** data;
    data = new char*[count];
    int i = 0;
    while( getline(rrr,line))
    {     
        if(line[0] == '>')
            cout << "> ignored " << endl;

        else {
         data[i] = new char[line.length() + 1];
         for(int _i = 0; _i < line.length() + 1; ++_i)
              data[i][_i] = line[_i];
          ++i; // next row
     }

    }