2017-07-17 3 views
0

ファイルから取った文字列が空でない限り実行される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); 
     } 
    } 
} 
+0

情報は「ベクトル」ですか?もしそうなら、それは適切なサイズですか? – GWW

+0

infoは配列 – cdecaro

+1

どのように情報が宣言されていますか?どのように私は宣言されていますか?私はどこに割り当てられていますか?どのようなエラーメッセージが表示されますか?なぜSOは[mcve]を必要としますか? –

答えて

0

私が見ることができる2つの問題があります。

第一 - あなたはインクリメントIは印刷する前に(あなたが情報に値を保存[0]と印刷情報[1])

第二 - あなたは「」(スペース)を消去されません使用している方法を消去ので、find( "")は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! 
}