2010-05-03 3 views
1

Ok, его было некоторое время, так как я сделал любой входной файл или манипуляции со строками, но то, что я пытаюсь сделать, это следующим образомс ++ строки и входной файл

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]); 


    } 
    } 

Теперь я предполагаю, что это не работает потому что >> пропускает новый символ линии? Если это так, то лучший способ сделать это.

ответ

1

Как насчет использования getline()?

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

Я предполагаю, что word является std::string. При использовании >> первый символ пробела заканчивается «словом», а следующий вызов пропускает белое пространство, поэтому в word нет пробела.

Вы не говорите, что вы на самом деле пытаетесь сделать, но для линейного входа вы должны использовать свободную функцию std::getline, а затем разделить каждую строку на слова как отдельный шаг.

E.g.

std::string line; 
while(std::getline(std::cin, line)) 
{ 
    // parse line 
} 
Смежные вопросы