У меня есть функция, которая принимает две строки и возвращает без двойников символы, которые появляются в обеих строках, в том порядке, в котором они появляются в первой. Вот моя реализация в C:
#include <string.h>
//Remove all char duplicates in string
//Sub function
char *removeAll(char* str,char c, int pos)
{
int i,j;
int len = strlen(str);
for (i = pos+1;i<len;i++)
{
if (str[i] == c)
{
for (j=i;j<len;j++)
{
str[j] = str[j+1];
}
len--;i--;
}
}
return str;
}
//Finds all common chars and concatenate it to one string
//Sub function
char* commonString(char* p1,char* p2)
{
char* res = "";
for (int k=0;k<strlen(p1);k++)
{
for (int h=0;h<strlen(p2);h++)
{
if (p1[k] == p2[h])
{
strcat(res,&p1[k]);
}
}
}
return res;
}
/* The main function that takes two strings and return, without doubles, the
characters that appear in both strings, in the order they appear in the first
one.*/
char* inter(char* s1,char* s2)
{
char* new_str,*new_str1;
int len1 = strlen(s1),len2 = strlen(s2);
for (int i = 0;i<len1;i++)
{
new_str = removeAll(s1, s1[i], i);
len1 = len1-(len1-strlen(new_str));
if (strcmp(new_str, s1) != 0) i = 0;
}
for (int j = 0;j<len2;j++)
{
new_str1 = removeAll(s2, s2[j], j);
len2 = len2-(len2-strlen(new_str1));
if (strcmp(new_str1, s2) != 0) j = 0;
}
char* res = commonString(new_str, new_str1);
return res;
}
Это дает « FAILURE EXECUTION » Что не так с моим кодом? Можете ли вы помочь исправить это?
Примеры ввода-вывода:
Пример 00
> Input: "padinton" && "paqefwtdjetyiytjneytjoeyjnejeyj"
> Output:
> Return Value: "padinto"
Пример 01
> Input: "ddf6vewg64f" && "gtwthgdwthdwfteewhrtag6h4ffdhsd"
> Output:
> Return Value: "df6ewg4"
Пример 02
> Input: "nothing" && "This sentence hides nothing"
> Output:
> Return Value: "nothig"