С вашим кодом довольно много проблем
strcmp
не требуется для простого сравнения символов - 3-я строка символов выделена вызывающей стороной?
- Ваш подход не будет работать, если исходные строки имеют разные размеры или не в алфавитном порядке.
Мое решение предполагает, что ввод является ASCII, и эффективен (использовался простой массив char синдексы, обозначающие значение ASCII символа).
Если символ найден в str1
, карта символов будет иметь 1, если она является общей, она будет иметь 2, в противном случае она будет иметь 0.
void strIntersect(char *str1, char *str2, char *str3)
{
int i=0, j=0, k=0;
char commonCharsMap[128] = { 0 };
while(str1[i] != '\0')
{
commonCharsMap[str1[i++]] = 1;
}
while(str2[j] != '\0')
{
if(commonCharsMap[str2[j]] == 1)
{
commonCharsMap[str2[j++]] = 2;
}
}
for(i=0; i<128; i++)
{
if(commonCharsMap[i] == 2)
{
str3[k++] = i;
}
}
str3[k++] = '\0';
}
int main()
{
char str1[] = "abcde";
char str2[] = "dce";
char str3[30];
strIntersect(str1, str2, str3);
printf("Common chars: %s\n", str3);
return 0;
}