Подсчет количества раз, когда слово появляется в файле C ++ - PullRequest
0 голосов
/ 30 апреля 2020

Я пытаюсь найти слово в файле, и каждый раз, когда оно появляется, счет увеличивается на 1. В настоящее время файл содержит несколько строк со словом Culture. Программа выдает 1 для каждого запуска.

int main()
{
  fstream plate("data.txt", ios::in | ios::out | ios::app);
  int count = 0;
  string search = "Culture";
  string temp;
  while(!plate.eof())
    {
      getline(plate, temp);
      if(temp == search)
        {count++;}
    }

  cout << count << endl;    

  return 0;
}

Не понимаю, почему он выводит только 1 каждый раз

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

Вы читаете файл построчно, сравнивая целые строки, а не отдельные слова, считая только те строки, которые точно соответствуют строке search от начала до конца каждой строки.

Попробуйте это вместо:

int main() {
    ifstream plate("data.txt");
    int count = 0;
    string search = "Culture";
    string temp;
    while (plate >> temp) {
        if (temp == search) {
            ++count;
        }
    }
    cout << count << endl;
    return 0;
}
0 голосов
/ 30 апреля 2020

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

if (temp.find(search) != std::string::npos) {
    // contains the word
    count++;
}

Обновление: если слово может появиться в каждой строке более одного раза, тогда вам следует рассмотреть возможность использования другого l oop:

int step = search.size();
int position = 0;

while((position = temp.find(search, position)) != std::string::npos) {
    position += step;
    count++;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...