Вывести на экран похожие фамилии из заданного списка фамилий - C (СИ)
Формулировка задачи:
Задан список некоторых фамилий. Две фамилии назовем похо¬жими, если одна из них может быть получена из другой путем добавления какой-либо буквы в начало или конец фамилии. Напишите про¬грамму, которая выберет и выведет на экран похожие фамилии из заданного списка фамилий.
Решение задачи: «Вывести на экран похожие фамилии из заданного списка фамилий»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <ctype.h>
/*Задан список некоторых фамилий. Две фамилии назовем похо¬жими, если одна из них может быть получена из другой путем добавления какой-либо буквы в начало или конец фамилии.
Напишите про¬грамму, которая выберет и выведет на экран похожие фамилии из заданного списка фамилий.*/
int _tmain(int argc, _TCHAR* argv[])
{
char K[80][30],buf[80][30];
int i=0;
printf("Vvodte familii, po okonchanii piwite '.'\n\n");
while (K[i-1][strlen(K[i-1])-1]!='.')
{
scanf("%s",K[i++]);
strcpy(buf[i-1],K[i-1]); //++
}
K[i-1][strlen(K[i-1])-1]='\0';
printf("\nPosle obrabotki.\n");
for(int q=0;q<80;q++)//++
for(int w=0;w<30;w++)
buf[q][w]=tolower(buf[q][w]);
for(int q=0;q<i;q++)
for(int w=0;w<i;w++)
if(strstr(buf[q],buf[w]) && strcmp(K[q],K[w])!=0 && (strlen(K[q])-strlen(K[w])<2 || strlen(K[q])-strlen(K[w])>-2)) printf("%s=%s\n",K[q],K[w]);
return 0;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы:
stdio.hдля работы с функциями ввода-выводаstring.hдля работы со строкамиctype.hдля работы с символами
- Определяем список фамилий в массиве K:
- Вводим фамилии до тех пор, пока не введем фамилию, оканчивающуюся на
. - С помощью функции
scanfвводим фамилию и сохраняем ее в массиве K - Последнюю введенную фамилию сохраняем в массиве buf
- Вводим фамилии до тех пор, пока не введем фамилию, оканчивающуюся на
- Приводим все символы фамилий к нижнему регистру:
- Проходим по всем элементам массива buf и применяем функцию
tolowerк каждому символу
- Проходим по всем элементам массива buf и применяем функцию
- Сравниваем фамилии между собой:
- Проходим по всем элементам массива K
- Для каждой фамилии проходим по всем элементам массива, начиная с текущего индекса, исключая текущий элемент
- Если текущая фамилия содержится в предыдущей (с учетом регистра), и они не равны, и длина текущей фамилии отличается от длины предыдущей фамилии не более чем на 2 символа, выводим их на экран
- Завершаем программу:
- Возвращаем 0, что означает успешное завершение программы