Второе вхождение буквы в строке и подсчёт кол-ва

Дана строка. Найдите в этой строке второе вхождение буквы f и выведите индекс этого вхождения. Если буква f в данной строке встречается только один раз, выведите число -1, а если не встречается ни разу, выведите число -2. Индексы нумеруются с нуля. Вот мой код:

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

int main() {

    string a; // объявление строки
    cin >> a; // ввод строки
    for(int i=0, number = 0;i<a.size();i++) { // цикл для поиска второго вхождения

        if (a[i] == 'f') { // если индекс равен  букве "f"
            
            if (++number == 2) { // если это вторая буква
                cout << i << endl; // то вывести индекс
                break;
            }
            
                    int res = 0;
                    char f = 'f';
        for (int i=0;i<a.length();i++) { // цикл для того, чтобы посчитать, сколько раз буква "f" встречается в введённом слове
        
  

        if (a[i] == f) { // если буква равна "f"
            res++; // то увеличить "res"
            
            if (res == 1) { // если буква встречается 1 раз
                cout << "-1" << endl; // то вывести -1
            }   else if (res == 0) { // если буквы вообще нет
                cout << "-2" << endl; // то вывести -2
            }
        }
            
        }
 
        }

    }

    return 0;
}

Подскажите, пожалуйста, что я делаю неправильно? Когда пытаюсь вывести "-1" или "-2", то программа работает неправильно.


Ответы (3 шт):

Автор решения: Harry
for(int i=0, number = 0; i < a.size(); i++) 
{
    if (a[i] == 'f') 
    {
        if (++number == 2) 
        {
            cout << i << endl;
            break;
        }
    }
}
→ Ссылка
Автор решения: AR Hovsepyan

Не зря же написали методы std::string. Они написаны, чтобы было удобно работать со строками, и если вы их не используете, то работайте с обычными массивами. Если же использовать, то получим код компактней и защищенный от ошибок. Результат получится одной строчкой:

std::string a("coffee");    
std::cout << a.find('f', a.find('f') + 1);  

Если не уверены, что в строке найдется этот символ, то нужно выполнить с проверкой:

size_t i = a.find('f') + 1;  
if (i < a.size())
    cout << a.find('f', i);
 
→ Ссылка
Автор решения: TigerTV.ru
#include <iostream>
#include <string>
#include <algorithm>

int main () {
    std::string s;    
    std::cin >> s;

    int c = std::count(s.begin(), s.end(), 'f');
    int i = s.find("ff") + 1;

    std::cout << "c=" << c << std::endl; 
    std::cout << "index=" << i << std::endl; 
}
→ Ссылка