2017-07-17 6 views
0

Ich versuche eine While-Schleife zu erstellen, die so lange ausgeführt wird, wie die aus einer Datei entnommene Zeichenfolge nicht leer ist. Ich muss die Zeichenfolge durch Leerzeichen trennen und speichern Sie die Informationen für die zukünftige Verwendung, so dass ich die Teilzeichenfolge in ein Array setzen und dann aus dem eigentlichen Array entfernen. Ich bekomme jedoch immer eine Fehlermeldung, wenn ich das Programm starte oder nichts als Leerraum gedruckt wird. I added a picture of the file I'm using and of the error message I'm gettingSubstring und Löschen

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

Ist info ein 'Vektor'? Wenn ja, ist die Größe angemessen? – GWW

+0

info ist ein Array – cdecaro

+1

Wie wird info deklariert? Wie wird ich erklärt? Wo ist ich zugeordnet? Welche Fehlermeldung erhalten Sie? Warum benötigt SO ein [mcve]? –

Antwort

0

Es gibt zwei Probleme, die ich sehen kann.

1. - Sie erhöhen ‚i‘ vor dem Drucken (Sie speichern den Wert in info [0] und Druck info [1])

2. - löschen Sie die Art und Weise Sie verwenden den Raum nicht löschen „“ , so finden ("") die Position 0 ab dem 2. Mal vor.

Ein paar Anpassungen können das beheben. Siehe unten stehenden Code:

WICHTIG: So wie Sie Ihren Code schreiben, benötigen Sie am Ende der Zeile einen Platz!

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! 
}