Второе вхождение буквы в строке и подсчёт кол-ва
Дана строка. Найдите в этой строке второе вхождение буквы 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 шт):
for(int i=0, number = 0; i < a.size(); i++)
{
if (a[i] == 'f')
{
if (++number == 2)
{
cout << i << endl;
break;
}
}
}
Не зря же написали методы 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);
#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;
}