2017-07-17 5 views
0

J'essaie de créer une boucle while qui s'exécute tant que la chaîne d'un fichier n'est pas vide. J'ai besoin de séparer la chaîne par des espaces et enregistrer les informations pour une utilisation future, donc je mets la sous-chaîne dans un tableau et ensuite le retirer du tableau réel. Cependant, je continue à recevoir un message d'erreur lorsque j'exécute le programme, ou rien, mais l'espace blanc est imprimé. I added a picture of the file I'm using and of the error message I'm gettingSous-chaîne et effacement

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

Est-ce que info a 'vector'? si oui, est-il dimensionné de manière appropriée? – GWW

+0

info est un tableau – cdecaro

+1

Comment les informations sont-elles déclarées? Comment est-ce que je suis déclaré? Où est-ce que je suis affecté? Quel message d'erreur obtenez-vous? Pourquoi SO a-t-il besoin d'un [mcve]? –

Répondre

0

Il y a deux problèmes que je peux voir.

1er - Vous increment « i » avant l'impression (vous stocker la valeur dans les informations [0] et les informations d'impression [1])

2 - effacer la façon dont vous utilisez n'effacera pas l'espace « » , alors find ("") retournera la position 0 à partir de la deuxième fois.

Quelques ajustements peuvent résoudre ce problème. Voir le code ci-dessous:

IMPORTANT: La façon dont votre code est écrit, vous avez besoin d'un espace à la fin de la ligne!

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