Напечатать только те буквы слов, которые встречаются в обоих словах только один раз - C (СИ)
Формулировка задачи:
Решение задачи: «Напечатать только те буквы слов, которые встречаются в обоих словах только один раз»
#include <stdio.h>
#define N 80
//Даны два слова. Напечатать только те буквы слов, которые встречаются в обоих словах только один раз.
void NoRepeatLetters(char* , char* );
int main()
{
char str1[N], str2[N];
puts("Enter first word:");
fgets(str1, N, stdin);
puts("Enter second word:");
fgets(str2, N, stdin);
puts("Letters which occur in both words only once:");
NoRepeatLetters(str1, str2);
NoRepeatLetters(str2, str1);
return 0;
}
void NoRepeatLetters(char* w1, char* w2)
{
char* p, *q, *m;
int flag = 0;
for(m = w1; *m; m++, flag = 0){
for(p = w1; *p; p++){
if(p != m){
if(*m == *p){
flag = 1;
break;
}
}
}
if(!flag){
for(q = w2; *q; q++){
if(*m == *q){
flag = 1;
break;
}
}
if(!flag)
putchar(*m);
}
}
}
Объяснение кода листинга программы
В этом коде реализована функция NoRepeatLetters, которая принимает два строковых параметра типа char*. Эта функция ищет и выводит только те буквы, которые встречаются в обоих словах только один раз.
В основной функции main создаются две строки str1 и str2, в которые считываются два слова, введенные пользователем. Затем вызывается функция NoRepeatLetters, передавая ей эти две строки.
Внутри функции NoRepeatLetters используется два вложенных цикла. Внешний цикл проходит по каждому символу в первом слове, а внутренний цикл проверяет, встречается ли этот символ во втором слове. Если символ не встречается, то он выводится на экран.
Код немного запутан из-за использования указателей, но основная идея заключается в том, что функция NoRepeatLetters ищет и выводит только те буквы, которые встречаются в обоих словах только один раз.