9.cpp 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #include <iostream> // подключение библиотеки ввода-вывода
  2. #include <string> // подключение библиотеки для работы со строками
  3. using namespace std; // пространство имён
  4. int main(){
  5. string str; // вводимая строка
  6. char letter; // искомая буква
  7. int count = 0; // счётчик для количества подсчитанных слов
  8. int space = 0; // счётчик для проверки на пробелы в строке
  9. bool c = false; // переменная проверки на разделитель
  10. string word; // строка для слова
  11. int start = 0, finish = 0; // значения начала и конца слова
  12. cout << "Input string: " << endl;
  13. getline(cin, str); // ввод строки
  14. // проверка на пустоту строки
  15. if (str.empty()){ // если строка пуста, то
  16. cout << "String can't be empty" << endl; // вывод сообщения об ошибке
  17. exit(0); // завершение программы
  18. }
  19. else { // иначе проверка на пробелы
  20. for (int i = 0; i < str.size(); i++){ // цикл на всю строку
  21. if (str[i] == ' '){ // если символ является пробелом, то
  22. space++; // увеличиваем счётчик
  23. }
  24. }
  25. if (space == str.size()) { // если количество пробелов равно размеру строки, то
  26. cout << "String have only spaces." << endl; // вывод сообщения об ошибке
  27. exit(0); // завершение программы
  28. }
  29. }
  30. cout << "Input letter: " << endl;
  31. letter = getchar(); // ввод буквы
  32. // проверка на пустоту вводимого символа
  33. if ((letter == '\n') || (letter == ' ')){ // если символ является переходом на новую строку или пробелом, то
  34. cout << "Letter can't be empty" << endl; // вывод сообщения об ошибке
  35. exit(0); // завершение программы
  36. }
  37. for (int i = 0; i < str.size(); i++){ // цикл на полную строку
  38. if (str[i] == ' '){ // если текущий символ является пробелом, то
  39. finish = i; // объявляем концом слова значение i
  40. word = str.substr(start, (finish - start)); // присваиваем символы от start до finish переменной word
  41. for (int j = 0; j < word.size(); j++){ // цикл на слово
  42. if (word[j] == letter){ // если в слове есть искомая буква, то
  43. count++; // увеличиваем счётчик
  44. break; // останавливаем цикл по слову
  45. }
  46. }
  47. start = finish + 1; // изменяем значение start на finish + 1 для пропуска пробела
  48. c = true; // меняем значение c на true, так как в строке есть пробелы
  49. }
  50. }
  51. // проверка последнего слова, которое не вошло в основной цикл
  52. word = str.substr(start, (finish - start));
  53. for (int j = 0; j < word.size(); j++){
  54. if (word[j] == letter){
  55. count++;
  56. break;
  57. }
  58. }
  59. if (c == false){ // если в строке нет пробелов, то
  60. for (int i = 0; i < str.size(); i++){ // цикл на строку
  61. if (str[i] == letter){ // если символ является искомой буквой
  62. count++;// увеличиваем счётчик
  63. break; // останавливаем цикл по слову
  64. }
  65. }
  66. }
  67. cout << "Count of words: " << count << endl; // вывод счётчика
  68. return 0; // успешное завершение программы
  69. }