我的代码应该比较2个字符串,并按字母顺序返回常见字符。如果没有公共字符,它将返回一个空字符串。
但是该程序未运行。
代码
Input string 1:abcde
Input string 2:dec
Output: cde
示例
#
我如何使其工作?
答案 0 :(得分:1)
您的代码有很多问题
strcmp
不需要进行简单的字符比较我的解决方案假定输入为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;
}
答案 1 :(得分:0)
您的if case和Else if case是相同的,您只是根据Index比较元素。也就是说,您正在将第一个元素与第一个元素进行比较,第二个元素与第二个元素进行比较,依此类推。这不会为您提供解决方案。我建议使用两个for循环。以后,我会为您提供代码
答案 2 :(得分:0)
一个选项是为第一个字符串中的每个字符遍历完整的第二个字符串
int i = 0;
int k = 0;
while(str1[i] != '\0') {
int j = 0;
while(str2[j] != '\0') {
if (str1[i] == str2[j]) {
str3[k] = str1[i];
k++;
}
j++;
}
i++;
}
我替换了strcmp
,因为您是在比较单个字符而不是string