Определение количества вхождений заданного символа в заданной строке - C (СИ)

Узнай цену своей работы

Формулировка задачи:

помогите разобраться с этим заданием. Нужно дополнить код функциями, чтобы выполнялась задача: определение количества заданного символа в заданной строке
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int how_many(char ch, char sentence[])
  4. {
  5. int count = 0;
  6. int position;
  7. // **********************************************************************
  8.  
  9. // **********************************************************************
  10. return count;
  11. }
  12.  
  13. void clean_up(char ch)
  14. {
  15. while (ch != EOF && ch != '\n')
  16. ch = getchar();
  17. }
  18.  
  19. int main()
  20. {
  21. char ch;
  22. char sentence[1024];
  23. do {
  24. printf("Enter a character: ");
  25.  
  26. ch = getchar();
  27.  
  28. clean_up(ch);
  29.  
  30. if (ch < ' ' || ch > '~') {
  31. printf("That was not a legal character. Try again.\n");
  32. }
  33.  
  34. } while (ch < ' ' || ch > '~');
  35.  
  36. printf("Enter a sentence: ");
  37.  
  38. fgets(sentence, 1024, stdin);
  39.  
  40. printf("The character '%c' is in the sentence %d times.\n", ch, how_many(ch, sentence));
  41. return 0;
  42. }

Решение задачи: «Определение количества вхождений заданного символа в заданной строке»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int how_many(char ch, char sentence[])
  6. {
  7.     int count = 0;
  8.  
  9.     count = (sentence = strchr(sentence, ch)) ?
  10.         1 + how_many(ch, sentence + 1) : 0;
  11.  
  12.     return count;
  13. }
  14.  
  15.  
  16. void clean_up(char ch)
  17. {
  18.     while (ch != EOF && ch != '\n')
  19.         ch = getchar();
  20. }
  21.  
  22.  
  23. int main()
  24. {
  25.     char ch;
  26.     char sentence[1024];
  27.  
  28.     do {
  29.  
  30.         printf("Enter a character: ");
  31.  
  32.  
  33.         ch = getchar();
  34.  
  35.  
  36.         clean_up(ch);
  37.  
  38.  
  39.         if (ch < ' ' || ch > '~') {
  40.             printf("That was not a legal character. Try again.\n");
  41.         }
  42.  
  43.  
  44.     } while (ch < ' ' || ch > '~');
  45.  
  46.  
  47.     printf("Enter a sentence: ");
  48.  
  49.  
  50.     fgets(sentence, 1024, stdin);
  51.  
  52.  
  53.     printf("The character '%c' is in the sentence %d times.\n", ch, how_many(ch, sentence));
  54.  
  55.     return 0;
  56. }

Объяснение кода листинга программы

  1. Включаем необходимые заголовочные файлы для работы с функциями ввода-вывода, строками и условиями.
  2. Определяем функцию how_many, которая принимает символ и строку в качестве параметров и возвращает количество вхождений заданного символа в строке.
  3. Создаем переменную count, которая будет хранить количество вхождений.
  4. При помощи функции strchr ищем первое вхождение заданного символа в строке и увеличиваем count на 1.
  5. Рекурсивно вызываем функцию how_many для оставшейся части строки, начиная с символа, следующего за найденным входом.
  6. Возвращаем count.
  7. Определяем функцию clean_up, которая считывает символы до конца строки или до конца файла и удаляет их из буфера.
  8. В бесконечном цикле запрашиваем у пользователя ввод символа и очищаем буфер от лишних символов.
  9. Проверяем, является ли введенный символ корректным. Если нет, выводим сообщение об ошибке и просим ввести символ заново.
  10. После ввода корректного символа запрашиваем у пользователя ввод строки.
  11. Считываем строку с помощью функции fgets.
  12. Вызываем функцию how_many с введенной строкой и заданным символом.
  13. Выводим количество вхождений заданного символа в строке.
  14. Завершаем программу.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.571 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы