Подсчет строки в строке
Мне сказали попросить пользователя строку (предложение). Затем пользователю предлагается ввести еще одну строку для поиска в строке 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 ответов
Два вопроса:
- Вы печатаете
count
прежде чем рассчитать это. - Вы на самом деле не ищете подстроку. Вы должны посмотреть на документацию для
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
).