Вывести на печать список слов, имеющих заданную приставку - C (СИ)
Формулировка задачи:
Вывести на печать список слов, имеющих приставку (несколько букв), задаваемую с терминала.
Решение задачи: «Вывести на печать список слов, имеющих заданную приставку»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <locale.h>
#define N 256
#define D " ,.!?:;"
int main(void)
{
setlocale(LC_ALL,"RU");
char a[N]="приходи ко мне на приём, получиш приказ!";
char b[5]="";
int j,l;
char *p,*c,*s;
s=b;
printf("Введите приставку: ");
fgets(b,5,stdin);
l=strlen(b)-1;
for(p=strtok(a,D);p;p=strtok(NULL,D))
{
c=p;
for(j=0;b[j]!='\n';j++)
if(b[j]==*c++)continue;else break;
if(j==l)printf("%s\n",p);
}
return (0);
}
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с файлами и строками.
- Установка значения N для определения максимального количества символов в массиве.
- Установка значения D для определения разделителя, в данном случае пробел, точка, запятая, восклицательный и вопросительный знаки.
- Инициализация пустой строки b для считывания пользовательского ввода.
- Объявление переменных j и l для подсчета количества символов в строке b и строке a соответственно.
- Объявление указателей p, c и s для работы со строками a и b.
- Установка значения s=b для переменной s.
- Вывод сообщения с просьбой ввести приставку и считывание ввода с помощью функции fgets().
- Вычисление значения l как strlen(b)-1 для определения длины строки b, уменьшенной на 1, так как функция fgets() добавляет символ новой строки в конец строки.
- Использование цикла for и функции strtok() для разделения строки a на отдельные слова, используя разделитель D.
- Внутри цикла for, инициализация переменной c как p для работы с текущим словом.
- Использование цикла for для сравнения каждого символа в слове b с символами текущего слова, если символы совпадают, то пропустить текущий символ, иначе прервать цикл.
- Если цикл j не был прерван, то это означает, что текущее слово не соответствует введенному пользователем шаблону, поэтому его можно игнорировать.
- Если цикл j был прерван, то это означает, что текущее слово соответствует введенному пользователем шаблону, поэтому его можно вывести на экран.
- Завершение функции main() и возврат значения 0, что означает успешное выполнение программы.