Подсчет строки в строке

Мне сказали попросить пользователя строку (предложение). Затем пользователю предлагается ввести еще одну строку для поиска в строке 1 (предложение). Программа должна посчитать, сколько раз вторая строка появляется в первой строке. Я не получаю никаких ошибок, но это не считая букв. Вот результат, который я получаю:

Введите предложение: я люблю есть суп

Введите строку для поиска: ou

В первой предоставленной вами строке есть 0 строк ou.

Может кто-нибудь сказать, пожалуйста, что я делаю не так? Я новичок в C++, поэтому у меня возникли проблемы с пониманием.

#include <iostream>
#include <string>
using namespace std;

int  main() {

        string sentence;
        string search;
        int count = 0;

        cout<<"Enter a sentence:";
        getline (cin, sentence);
        cout<<"Enter string to search:";
        getline (cin, search);

        cout << "There are " << count << " of the string " << search << " in the first string you provided." <<"\n";

        for (int i=0; i < sentence.size(); ++i)
        {
                if (sentence == search)

                count++;
        }

        return count;


}

5 ответов

Два вопроса:

  1. Вы печатаете count прежде чем рассчитать это.
  2. Вы на самом деле не ищете подстроку. Вы должны посмотреть на документацию для std::string найти подходящий способ поиска подстрок. Тем не менее, вы на правильном пути.

Похоже, вы должны поместить оператор cout в конец этого метода. Потому что в вашем коде счетчик всегда равен 0, когда вы выводите его

У вас есть строка печати cout после цикла, где вы ищете строку и устанавливаете счетчик. Переместите его ниже этой петли.

Ну, вы пытаетесь вывести результаты до их расчета.

Также, == для точных совпадений, а не поиска по подстроке.

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

string::size_type pos = sentence.find(search);
while (pos != string::npos)
{
    pos = sentence.find(search, pos + search.size());
    count++;
}

Кроме того, вы, скорее всего, захотите переместить эту строку после точки, в которой вы фактически вычисляете значение count:

cout << "There are " << count << ...

В противном случае он, очевидно, выведет значение, до которого count изначально был инициализирован (т.е. 0).

Другие вопросы по тегам