2010-05-03 6 views
1

Ok, sa fait un moment que je l'ai fait une entrée de fichier ou la manipulation de chaînes, mais ce que j'essaie de faire est la suivanteC++ chaînes et entrée de fichier

while(infile >> word) { 
    for(int i = 0; i < word.length(); i++) { 
     if(word[i] == '\n') { 
      cout << "Found a new line" << endl; 
      lineNumber++; 
     } 
     if(!isalpha(word[i])) { 
      word.erase(i); 
     } 
     if(islower(word[i])) 
      word[i] = toupper(word[i]); 


    } 
    } 

Maintenant, je suppose que cela ne fonctionne pas car >> ignore le nouveau caractère de ligne ?? Si oui, quelle est la meilleure façon de le faire.

Répondre

1

Comment utiliser getline()?

string line; 
while(getline(infile, line)) 
{ 
    //Parse each line into individual words and do whatever you're going to do with them. 
} 
9

Je suppose que word est un std::string. Lorsque vous utilisez >>, le premier caractère d'espace blanc termine le 'mot' et l'invocation suivante ignore l'espace blanc, donc aucun espace blanc ne se trouve dans word.

Vous ne dites pas ce que vous essayez réellement de faire, mais pour une entrée basée sur une ligne, vous devriez envisager d'utiliser la fonction libre std::getline, puis de séparer chaque ligne en mots séparés.

E.g.

std::string line; 
while(std::getline(std::cin, line)) 
{ 
    // parse line 
}