Проблема с нахождением полуслова "авва" в тексте

190
19 ноября 2021, 17:00

Представлено вот такое задание:

Вот мой код:

#include<iostream>
#include<string>
using namespace std;
int main()
{
    setlocale(LC_ALL, "Russian");
    string aBBa = "Аввакий Аввакум Аввакиевич";
    int i = 0, j = 0;
    cout << "Выражение: " << aBBa << endl;
    do {
        if (aBBa[i] == 'а')
            j++;
        i++;
    } while (aBBa[i] != '\0');
    cout << "Кол-во букв а = " << j << endl;
    i = 0;
    system("pause");
    return 0;
}

Мне удалось только понять, как находить количество букв в тексте, если же я попробую найти полуслово тем же способом (а именно во фрагменте ниже напишу вместо a - авва),

if (aBBa[i] == 'а')
                j++;

то программа откажется что-либо вычислять (значение будет равно нулю).

Так работает не только с русскими словосочетаниями, пробовал вместо авва вводить abba и менять текст в переменной на английский - та же проблема.

Answer 1

Вы указали что используете C++ в метке, но Ваше решение не задействует возможности С++.

На данный момент Вы пытались использовать идею поиска по символьный (почитайте - метод Бойера-Мура-Хорспула или просто std::boyer_moore_searcher, они есть в std) Вы можете реализовать его Сами или посмотреть готовую реализацию.

Но давайте отойдем от Си-стайла и явного посимвольного сравнения. Ваш подход больше подходит под С. Вы можете добавить еще один вопрос и попросить реализовать это на СИ.

Посмотрите на Вариант решения на C++ который Вам подойдет. std::string уже умеет находить подстроку (и даже все подстроки) без явного манипулирования программистом данными.

#include <iostream>
#include <string>

int main([[maybe_unused]] int argc, [[maybe_unused]] char *argv[]) {
    std::string str{"Аввакий Аввакум Аввакиевич"};
    std::string key{"Авва"};
    std::size_t n {0};
    for (size_t pos = str.find(key, 0); pos != std::string::npos; ++n) {
        pos = str.find(key,pos+1);
    }
    std::cout << n << std::endl;
    return 0;
}
READ ALSO
Исходный код MFC

Исходный код MFC

Подскажите пожалуйста, где можно найти исходный код MFCЕсли конкретней, то я бы хотел посмотреть реализацию класса CFile, но не смог найти в интернете

91
Подключение .obj файла VS 2017

Подключение .obj файла VS 2017

При попытке подключенияobj файла возникает ошибка LNK1107 недопустимый или поврежденный файл: не удается прочитать по 0xDF HLL D:\Aleksey\Учеба\C++\HLL\HLL\add_matrix

199
Запуск приложения Windows Store из классического desktop приложения

Запуск приложения Windows Store из классического desktop приложения

Как из обычного классического desktop приложения написанного на C++ запустить приложение установленное из Windows Store? По аналогии с QProcess

160
Код шаблона в C++

Код шаблона в C++

Существует ли способ построить в классе группу "одинаковых" методов, но использующих каждый одно уникальное свойство/параметр, при помощи...

94