Применить функцию 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;
}

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

  1. Подключение необходимых библиотек для работы с файлами и строками.
  2. Объявление константы N, которая определяет максимальный размер вводимого текста.
  3. Определение функции my_fgets, которая считывает вводимый текст и возвращает его длину. Если текст превышает размер массива, выводится сообщение об ошибке и возвращается 0.
  4. В функции main() устанавливается стандартная локальная настройка.
  5. Объявление переменных len, count, s, word, p и start.
  6. Вывод сообщения с просьбой ввести текст.
  7. Проверка успешности считывания текста функцией my_fgets. Если считывание прошло успешно, выполняется следующий код.
  8. Вычисление длины слова word и инициализация переменной count значением 0.
  9. Установка указателя start на начало введенного текста.
  10. Организация цикла while, который выполняется до тех пор, пока не будет найдено следующее вхождение слова word.
  11. В каждой итерации цикла while проверяется, найдено ли вхождение слова word. Если да, увеличивается значение переменной count и сдвигается указатель start на длину слова word.
  12. После окончания цикла while выводится количество найденных вхождений слова word.
  13. Завершение функции main() и возвращение 0.

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


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

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

5   голосов , оценка 4.4 из 5
Похожие ответы