2013-10-13 4 views
-1

У меня есть текстовый файл с различным количеством слов/строк. Примером может служить:получение слова из нескольких строк кода C++

Hi 

My name is Joe 

How are you doing? 

Я хочу захватить любые пользовательские входы. Поэтому, если я буду искать Джо, это получится. К сожалению, я могу только выводить каждую строку вместо слова. У меня есть вектор, который держит каждую из этих построчно

vector<string> line; 
string search_word; 
int linenumber=1; 
    while (cin >> search_word) 
    { 
     for (int x=0; x < line.size(); x++) 
     { 
      if (line[x] == "\n") 
       linenumber++; 
      for (int s=0; s < line[x].size(); s++) 
      { 
       cout << line[x]; //This is outputting the letter instead of what I want which is the word. Once I have that I can do a comparison operator between search_word and this 
      } 

     } 

Так прямо сейчас line[1] = Hi, line[2] = My name is Joe.

Как мне добраться до места, где я могу получить фактическое слово?

+1

'vector line; 'это опечатка для' vector line; '? – john

+1

Что ??? (PS: Я прочитал ваш вопрос 2 раза, прежде чем писать этот комментарий) – LihO

+0

Я сомневаюсь, что вы протестировали этот код. Отформатированный ввод строк читается до первого пробела, и вы никогда не увидите '\ n'. Не говоря уже о том, что вы не можете сравнивать «int» с строковым литералом. –

ответ

1

operator>> использует пробельные в качестве разделителей, таким образом, он читает входное слово в слово уже:

#include <iostream> 
#include <sstream> 
#include <vector> 

int main() { 
    std::istringstream in("Hi\n\nMy name is Joe\n\nHow are you doing?"); 

    std::string word; 
    std::vector<std::string> words; 
    while (in >> word) { 
     words.push_back(word); 
    } 

    for (size_t i = 0; i < words.size(); ++i) 
     std::cout << words[i] << ", "; 
} 

выходы: Hi, My, name, is, Joe, How, are, you, doing?,

В случае, если вы собираетесь искать определенные ключевые слова в этом векторе, просто подготовите это ключевое слово в форме объекта std::string, и вы можете сделать что-то наподобие:

std::string keyword; 
... 
std::vector<std::string>::iterator i; 
i = std::find(words.begin(), words.end(), keyword); 
if (i != words.end()) { 
    // TODO: keyword found 
} 
else { 
    // TODO: keyword not found 
} 
Смежные вопросы