gpt4 book ai didi

c - 返回常用字符

转载 作者:行者123 更新时间:2023-11-30 19:04:08 24 4
gpt4 key购买 nike

我的代码应该比较 2 个字符串并按字母顺序返回常见字符。如果没有公共(public)字符,则返回空字符串。

但是程序没有运行。

代码

void strIntersect(char *str1, char *str2, char *str3)
{
int i,j, k;
i = 0;
j = 0;
k = 0;
while(str1[i]!='\0' || str2[j]!='\0')
{
if(strcmp(str1[i],str2[j])>0)
{
str3[k] = str1[i];
k++;
}
else if (strcmp(str2[j],str1[i])>0)
{
str3[k] = str2[j];
k++;
}
i++;
j++;
}
}

示例

Input string 1:abcde
Input string 2:dec
Output: cde

如何让它发挥作用?

最佳答案

您的代码存在不少问题

  1. strcmp 不需要进行简单的字符比较
  2. 第三个字符串是调用者分配的吗?
  3. 如果源字符串大小不同或不按字母顺序排列,您的方法将不起作用。

我的解决方案假设输入是 ASCII,并且是高效的(使用一个简单的字符数组,其索引表示字符的 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;
}

关于c - 返回常用字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52716084/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com