Вывести на печать список слов, имеющих приставку, задаваемую с терминала - C (СИ)

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

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

Разработать процедуру или функцию, выполняющую заданную операцию над строками. Предусмотреть и описать реакцию на некорректное задание параметров.

Не использовать

имеющиеся в языке средства обработки строк. Вывести на печать список слов, имеющих приставку (несколько букв), задаваемую с терминала Подскажите пожалуйста хотя бы идеи и возможности как это можно реализовать... без средств обработки строк..

Решение задачи: «Вывести на печать список слов, имеющих приставку, задаваемую с терминала»

textual
Листинг программы
#include <stdio.h>
#include <locale.h>
#define N 256
#define D " ,.!?:;"
 
int isWord(char *ps)
{
  char d[]=" .,;:!?\n\r\t";
  char *pd;
  for( pd = d; *pd; pd++)
  if(*ps == *pd)return 0;
  return 1;
}
/*-------------------------*/
void viviod_slov_s_prist( char *str)
{
  char b[10]="";
  int j = 0, l = 0, i;
  char *c, *s, *n, *t;
  s=b;
  printf("Введите приставку: ");
  if (fgets(b,10,stdin) == NULL) {puts("Error in input!\n"); return;}
  while(b[l++] != '\n');
  --l; 
  t = str;
  i = 0; 
  while(*t)
  {
    i = 0;
    if( isWord(t) && *t )
    { 
      n = c = t;
      while( isWord(t) && *t )
      {
        i++; 
        t++;
      }
      if( i < l)
          continue;
      else
          for( j = 0; j < l; ++j )
          {
             if(b[j] == *c){++c; continue;} else break;
          }
      if(j == l)
      {
        for(j = 0; j < i; ++j)      
         printf("%c", *n++ );printf("\n");
 
      }
    } else t++;
  }
return;
}
/*-------------------------*/
int main(void)
{
  setlocale(LC_ALL,"RU");
  char a[N]="приходи ко мне на приём, получиш приказ!";
  printf("Исходная строка: %s\n", a);
  viviod_slov_s_prist( a );
 return (0);
}

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

  1. Включаются необходимые заголовочные файлы
  2. Определяются макросы N и D
  3. Функция isWord проверяет, является ли символ словом, и возвращает 0, если да, и 1, если нет
  4. Функция viviod_slov_s_prist запрашивает у пользователя приставку, сохраняет ее в переменной b
  5. Переменная l инициализируется нулем и используется для определения конца строки
  6. Переменная t инициализируется как копия строки str
  7. В цикле while перебираются все символы строки t
  8. Если текущий символ является словом и не является концом строки, то начинается поиск следующего слова с этой приставки
  9. Если следующее слово найдено, то продолжается поиск слов с этой приставки, пока не будет найден конец слова или не будет достигнута длина строки b
  10. Если длина строки b достигнута, то найденное слово выводится на печать
  11. В конце программы выводится исходная строка a

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

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