Двухбуквенные сочетания

Это для каждой буквы, скорее всего, а мне был бы нужен код после этого, ибо до этого всё нормально работает.

Так тут сразу чтение из файла и заполнение map сочетаниями, дальше только вывести его.

Помочь можете? Именно в моём случае.

Это ж было уже

Смотрите, мне нужно именно из переменной text найти двухбуквенные сочетания, а там переменная типа char.image

Чот имя переменной врет, это не текст, а один символ ) Это скорее например ch.

Но тут же почти так есть, просто читается вся строка, а не по одному символу.
Так даже проще, не нужен второй цикл.

Еще, кстати, по идее надо конвертировать все буквы в один регистр, чтобы Хо и хо были одним сочетанием.
Функция tolower, хз будет ли это работать для русских символов.

    ifstream fin.......
    is_open........

    map<string, int> m;
    string s = "";
    char ch;
    while (fin.get(ch)) {
        ch = char(std::tolower(ch));
        if ((ch >= 'a' && ch <= 'z') || (ch >= 'а' && ch <= 'я')) {
            if (s.length() == 0) {
                s = ch;
            } else {
                if (s.length() == 1) {
                    s = s + ch;
                } else {
                    s[1] = ch;
                }
                m[s]++;
                s[0] = s[1];
            }
        } else {
            s = "";
        }
    }

У меня в переменной text - весь текст с файла

        while (fin.get(text))
            cout << text;
        cout << endl;

Надо именно в этом тексте найти двухбуквенные сочетания.

Нет. Там один символ на каждой итерации этого цикла посимвольного чтения файла.
После цикла соответственно там будет последний прочитанный символ.

Блин, а что тогда делать в моём случае? Нужно именно из текста сочетания.

Так было ж уже чтение в строку? Даже с фильтрацией только букв.

Вообще проще всего читать в строку так:

string text;
char ch;
...
while (fin.get(ch)) {
    text += ch;
}

cout << text << endl;

и потом просто цикл как было в первом примере или тут

:arrow_down:

    map<string, int> m;
    string s = "";
-   while (fin.get(ch)) {
+   for (auto ch : text) {
        ch = char(std::tolower(ch));
        if ((ch >= 'a' && ch <= 'z') || (ch >= 'а' && ch <= 'я')) {
        ......................
    }

Или если с filter из кода выше, то можно убрать тут проверку букв и tolower.

Только в коде выше скорее всего не работает чтение тут

потому что файл уже был прочитан до этого и fin уже в конце файла.

Странный вопрос какой-то. А скомпилировать и запустить не судьба?

Скорее всего, ТС сам ничего делать и не собирается и ушел в теоретизирование:

Потеряны разделители букв. Поэтому и вставлено туда где фильтрация.

Судьба, но всё равно что-то не так (

Непонятно что должен был продемонстрировать скриншот, но сверху явно что-то не то.
s это переменная для текущего сочетания:


и внизу странный цикл + зачем-то вывод на каждой итерации цикла для поиска сочетаний.

Стопэ, а что выводиться-то должно?

m в конце программы.

s это просто переменная для текущего сочетания во время прохода текста.
Поэтому оно и инициализируется пустой строкой в начале + при сбросе когда встретили не букву.

Блин, а это что вообще? Первый раз вижу…

Так был же уже вывод мапа в коде выше, просто в конце программы надо, а не в этом цикле.

По идее должно быть так?

Для чего второй for с ++m[v]? И s так и не исправлено.