1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- #include <iostream>
- #include <string>
- using namespace std;
- int get_counter(string str, int start, int end, int counter){
- if (str[start] == str[end - 1]){ // если первая и последняя буквы слова совпадают, то
- counter++; // увеличиваем счётчик количества слов
- }
- return counter; // возвращаем счётчик
- }
- int count_elements(string str, int i){
- while (ispunct(str[i]) || isspace(str[i])){ // пока текущий символ строки является пробелом или знаком пунктуации
- i++; // увеличичвать индекс
- }
- return i; // возвращаем индекс
- }
- int counting(string str){
- int start = 0; // счётчик определения начала слова
- int end = 0; // счётчик определения конца слова
- int skip_count = 0; // счётчик пропусков
- int counter = 0; // счётчик количества слов, удовлетворяющих условию ТЗ
- for (int i = 0; i <= str.size(); i++){
- if (skip_count > 0){ // если есть ряд символов без букв
- skip_count--; // уменьшаем счётчик пропусков
- continue; // переходим на следующую итерацию до следующей буквы в строке
- }
- if (ispunct(str[i]) || isspace(str[i]) || str[i] == '\0'){ // если текущий символ строки не является буквой, то
- end = i; // счётчик окончания равен текущему значению i
- counter = get_counter(str, start, end, counter);
- skip_count = count_elements(str, skip_count);
- end = count_elements(str, end);
- start = end; // присваиваем счётчику start значение от end для
- }
- }
- return counter;
- }
- int main(){
- string str; // вводимая строка
- int counter; // счётчик количества слов, удовлетворяющих условию ТЗ
- // ввод строк
- cout << "Input stroke: ";
- getline(cin, str);
- counter = counting(str);
- // итоговый вывод
- cout << endl << "Count: " << counter << endl;
- return 0;
- }
|