子串和擦除

时间:2017-07-17 05:16:51

标签: c++ file io substring erase

我正在尝试创建一个while循环,只要从文件中取出的字符串不为空就运行。我需要用空格分隔字符串并保存信息以备将来使用,所以我将子字符串放入一个数组中,然后将其从实际数组中删除。但是,当我运行程序时,我不断收到错误消息,或者只打印空白区域。 I added a picture of the file I'm using and of the error message I'm getting

fstream myfile;
string line;
string info[10000];
int i=0, pos;

myfile.open("bfine_project1_input.txt");
//Check
if (myfile.fail()){
    cerr << "Error opening file" << endl;
    exit(1);
}

if (myfile.is_open()){
    while (getline (myfile,line)){
        while(line.size() !=0){
            pos = line.find(" ");
            info[i]= line.substr(0,pos);
            i++;
            cout << info[i] << endl;
            //line.erase(0, pos);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我可以看到两个问题。

1 - 你增加&#39;我&#39;打印前(将值存储在info [0]和打印信息[1]中)

第二 - 擦除你使用的方式赢得了擦除空间&#34; &#34;,所以find(&#34;&#34;)将从第2次开始返回位置0。

一些调整可以解决这个问题。请参阅以下代码:

重要提示:编写代码的方式需要在行尾添加空格!

string line;
string info[10000];
int i=0, pos;

line = "1325356 134 14351 5153613 1551 ";
while(line.size() !=0){
    pos = line.find(" ");
    info[i]= line.substr(0, pos);
    cout << i << " " << info[i] << endl;
    line.erase(0,pos+1); //ERASE " " too!
    i++;//increment i only after everything is done!
}