Вывести на печать список слов, имеющих приставку, задаваемую с терминала - 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);
}
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы
- Определяются макросы N и D
- Функция isWord проверяет, является ли символ словом, и возвращает 0, если да, и 1, если нет
- Функция viviod_slov_s_prist запрашивает у пользователя приставку, сохраняет ее в переменной b
- Переменная l инициализируется нулем и используется для определения конца строки
- Переменная t инициализируется как копия строки str
- В цикле while перебираются все символы строки t
- Если текущий символ является словом и не является концом строки, то начинается поиск следующего слова с этой приставки
- Если следующее слово найдено, то продолжается поиск слов с этой приставки, пока не будет найден конец слова или не будет достигнута длина строки b
- Если длина строки b достигнута, то найденное слово выводится на печать
- В конце программы выводится исходная строка a