1.cpp 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. int get_counter(string str, int start, int end, int counter){
  5. if (str[start] == str[end - 1]){ // если первая и последняя буквы слова совпадают, то
  6. counter++; // увеличиваем счётчик количества слов
  7. }
  8. return counter; // возвращаем счётчик
  9. }
  10. int count_elements(string str, int i){
  11. while (ispunct(str[i]) || isspace(str[i])){ // пока текущий символ строки является пробелом или знаком пунктуации
  12. i++; // увеличичвать индекс
  13. }
  14. return i; // возвращаем индекс
  15. }
  16. int counting(string str){
  17. int start = 0; // счётчик определения начала слова
  18. int end = 0; // счётчик определения конца слова
  19. int skip_count = 0; // счётчик пропусков
  20. int counter = 0; // счётчик количества слов, удовлетворяющих условию ТЗ
  21. for (int i = 0; i <= str.size(); i++){
  22. if (skip_count > 0){ // если есть ряд символов без букв
  23. skip_count--; // уменьшаем счётчик пропусков
  24. continue; // переходим на следующую итерацию до следующей буквы в строке
  25. }
  26. if (ispunct(str[i]) || isspace(str[i]) || str[i] == '\0'){ // если текущий символ строки не является буквой, то
  27. end = i; // счётчик окончания равен текущему значению i
  28. counter = get_counter(str, start, end, counter);
  29. skip_count = count_elements(str, skip_count);
  30. end = count_elements(str, end);
  31. start = end; // присваиваем счётчику start значение от end для
  32. }
  33. }
  34. return counter;
  35. }
  36. int main(){
  37. string str; // вводимая строка
  38. int counter; // счётчик количества слов, удовлетворяющих условию ТЗ
  39. // ввод строк
  40. cout << "Input stroke: ";
  41. getline(cin, str);
  42. counter = counting(str);
  43. // итоговый вывод
  44. cout << endl << "Count: " << counter << endl;
  45. return 0;
  46. }