2009-07-26 3 views
0

В основном эта программа ищет файл .txt для слова, и если он находит его, он печатает строку и номер строки. Вот что я до сих пор.Чтение частей строки (getline())

Код:

#include "std_lib_facilities.h" 

int main() 
{ 
    string findword; 
    cout << "Enter word to search for.\n"; 
    cin >> findword; 

    char filename[20]; 
    cout << "Enter file to search in.\n"; 
    cin >> filename; 
    ifstream ist(filename); 

    string line; 
    string word; 
    int linecounter = 1; 
    while(getline(ist, line)) 
    { 
    if(line.find(findword) != string::npos){ 
      cout << line << " " << linecounter << endl;} 
    ++linecounter; 
    } 

    keep_window_open(); 
} 

решаемая.

ответ

4

Вы ищете find:

if (line.find(findword) != string::npos) { ... } 
+0

Это именно то, что я искал. Однако у меня все еще есть проблема. Он выводит результаты, в которых нет слова. Я не включил! - string :: npos, потому что я не знал, что вы имели в виду. Я отредактирую код, чтобы показать вам, что у меня есть. – trikker

+0

! = String :: npos - это значение, которое вы сравниваете, если слово отсутствует в строке. То есть, если результат, возвращаемый find, не равен строке :: npos, а не означает, что вы нашли слово, в противном случае он будет игнорировать строку – Milan

+0

Забудьте об этом, я включил! - string :: npos и работал. Я просто сделаю некоторые исследования по этому вопросу. – trikker

-1

Вы можете использовать регулярное выражение, чтобы найти слово в строке. Не знаю достаточно C++, чтобы помочь вам в деталях.

+0

http://stackoverflow.com/questions/329517/there-is-a-function-to-use-pattern-matching-using-regular-expressions -in-c – Reunanen

0

Убедитесь, что в вашем текстовом файле нет пробелов вокруг имен. В противном случае, пусть ist Заботьтесь как следующее:

while(ist >> line) 
{ 
if(line == findword){ 
     cout << line << " " << linecounter << endl;} 
++linecounter; 
} 

Я считаю, что ваш файл имен содержит имя на каждой строке. поэтому при использовании >>, ist позаботится о наличии дополнительных пробелов.

1

Я бы сделал так, как вы предложили, и разделите строки на слова или жетоны, помеченные пробелом, а затем найдите искомые ключевые слова среди списка токенов.

Смежные вопросы