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

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

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

помогите разобраться с этим заданием. Нужно дополнить код функциями, чтобы выполнялась задача: определение количества заданного символа в заданной строке
#include <stdio.h>
#include <stdlib.h>
 
int how_many(char ch, char sentence[])
{
    int count = 0;
    int position;
 
    // **********************************************************************

    // **********************************************************************
 
    return count;
}

void clean_up(char ch)
{
    while (ch != EOF && ch != '\n')
        ch = getchar();
}

int main()
{
    char ch; 
    char sentence[1024]; 
 
    do {
        
        printf("Enter a character: ");

        ch = getchar();

        clean_up(ch);

        if (ch < ' ' || ch > '~') {
            printf("That was not a legal character. Try again.\n");
        }

    } while (ch < ' ' || ch > '~');

    printf("Enter a sentence: ");

    fgets(sentence, 1024, stdin);

    printf("The character '%c' is in the sentence %d times.\n", ch, how_many(ch, sentence));
 
    return 0;
}

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

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int how_many(char ch, char sentence[])
{
    int count = 0;
 
    count = (sentence = strchr(sentence, ch)) ?
        1 + how_many(ch, sentence + 1) : 0;
 
    return count;
}
 
 
void clean_up(char ch)
{
    while (ch != EOF && ch != '\n')
        ch = getchar();
}
 
 
int main()
{
    char ch;
    char sentence[1024];
 
    do {
 
        printf("Enter a character: ");
 
 
        ch = getchar();
 
 
        clean_up(ch);
 
 
        if (ch < ' ' || ch > '~') {
            printf("That was not a legal character. Try again.\n");
        }
 
 
    } while (ch < ' ' || ch > '~');
 
 
    printf("Enter a sentence: ");
 
 
    fgets(sentence, 1024, stdin);
 
 
    printf("The character '%c' is in the sentence %d times.\n", ch, how_many(ch, sentence));
 
    return 0;
}

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

  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
Похожие ответы