Это для каждой буквы, скорее всего, а мне был бы нужен код после этого, ибо до этого всё нормально работает.
Так тут сразу чтение из файла и заполнение map сочетаниями, дальше только вывести его.
Помочь можете? Именно в моём случае.
Это ж было уже
Смотрите, мне нужно именно из переменной text найти двухбуквенные сочетания, а там переменная типа char.
Чот имя переменной врет, это не текст, а один символ ) Это скорее например 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;
и потом просто цикл как было в первом примере или тут

    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 так и не исправлено.



