Определение количества вхождений заданного символа в заданной строке - 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;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с функциями ввода-вывода, строками и условиями.
- Определяем функцию how_many, которая принимает символ и строку в качестве параметров и возвращает количество вхождений заданного символа в строке.
- Создаем переменную count, которая будет хранить количество вхождений.
- При помощи функции strchr ищем первое вхождение заданного символа в строке и увеличиваем count на 1.
- Рекурсивно вызываем функцию how_many для оставшейся части строки, начиная с символа, следующего за найденным входом.
- Возвращаем count.
- Определяем функцию clean_up, которая считывает символы до конца строки или до конца файла и удаляет их из буфера.
- В бесконечном цикле запрашиваем у пользователя ввод символа и очищаем буфер от лишних символов.
- Проверяем, является ли введенный символ корректным. Если нет, выводим сообщение об ошибке и просим ввести символ заново.
- После ввода корректного символа запрашиваем у пользователя ввод строки.
- Считываем строку с помощью функции fgets.
- Вызываем функцию how_many с введенной строкой и заданным символом.
- Выводим количество вхождений заданного символа в строке.
- Завершаем программу.