Применить функцию getchar в программе, которая определяет, сколько раз содержится в строке заданное слово - C (СИ)
Формулировка задачи:
Всем доброго вечернего времени суток! Хочу попросить вашей помощи. Данная программа определяет сколько содержится раз в строке, которая вводится с клавиатуры, слово "proga". Но нужно вместо функции fgets применить getchar.
Вот сам код:
#include <stdio.h>
#include <string.h>
const int N = 100;
int main(void)
{
int len, count;
char s[N], word[] = "proga", *p, *start;
printf("\nВведите текст: " );
fgets (s, N, stdin);
len = strlen (word);
count = 0;
start = s;
while (1)
{
p = strstr (start, word);
if (p == NULL) break;
count ++;
start = p + len;
}
printf ("Этот текст встречает слово %d раз/раза \n", count);
return 0;
}Решение задачи: «Применить функцию getchar в программе, которая определяет, сколько раз содержится в строке заданное слово»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <locale.h>
const int N = 100;
int my_fgets(char* s, const int N)
{
int i = 0;
char ch;
if (i > N - 2)
{
printf("Недостаточный размер массива!\n");
return 0;
}
while (ch = getchar())
{
s[i] = ch;
if (ch == '\n')
{
++i;
s[i] = '\0';
return 1;
}
if (i == N - 2)
{
s[i++] = '\n';
s[i] = '\0';
printf("Недостаточный размер массива!\n");
return 0;
}
++i;
}
return 1;
}
int main(void)
{
setlocale(0, "");
int len, count;
char s[N], word[] = "proga", *p, *start;
printf("\nВведите текст: " );
if (my_fgets (s, N))
{
len = strlen (word);
count = 0;
start = s;
while (1)
{
p = strstr (start, word);
if (p == NULL) break;
count ++;
start = p + len;
}
printf ("Этот текст встречает слово %d раз/раза \n", count);
}
return 0;
}
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с файлами и строками.
- Объявление константы N, которая определяет максимальный размер вводимого текста.
- Определение функции my_fgets, которая считывает вводимый текст и возвращает его длину. Если текст превышает размер массива, выводится сообщение об ошибке и возвращается 0.
- В функции main() устанавливается стандартная локальная настройка.
- Объявление переменных len, count, s, word, p и start.
- Вывод сообщения с просьбой ввести текст.
- Проверка успешности считывания текста функцией my_fgets. Если считывание прошло успешно, выполняется следующий код.
- Вычисление длины слова word и инициализация переменной count значением 0.
- Установка указателя start на начало введенного текста.
- Организация цикла while, который выполняется до тех пор, пока не будет найдено следующее вхождение слова word.
- В каждой итерации цикла while проверяется, найдено ли вхождение слова word. Если да, увеличивается значение переменной count и сдвигается указатель start на длину слова word.
- После окончания цикла while выводится количество найденных вхождений слова word.
- Завершение функции main() и возвращение 0.