一道C语言编程题,麻烦大家帮我看看问题出在哪里?

2025-03-03 08:56:58
推荐回答(2个)
回答1:

字符串很长的时候出错,估计时是字符串的长度超过了s1的大小,可以看看strcat函数的具体意义。从给出的程序看,要做很多循环,时间复杂度比较高,下面给出了遍历这两个字符串,就能找到不同的字符的方法,时间复杂度是O(n),可以作为参考。

可以使用哈希表存储字符出现的位置,然后比较两个哈希表,如果不一样,那么就是只在一个字符串中出现。代码如下:

#include
#include
char HashTable1[256];
char HashTable2[256];
int main()
{  
static char  s1[100],s2[100];
int  i,j,k=1;
gets(s1);
gets(s2);
for (i = 0;i {
HashTable1[s1[i]] |= 1;
}
for (i = 0;i {
HashTable2[s2[i]] |= 1;
}
for (int i = 0;i<256;++i)
{
if (HashTable1[i] != HashTable2[i])
{
printf("%c",i);
}
}
printf("\n");
}

代码附件中也有。运行结果如下:

回答2:

整个程序的思路就是错的,短对仅仅是运气好而已。给你程序,没有调试过,你自己试试吧
int main()
{
char s1[100] = {0},s2[100] = {0};
int i = 0, j = 0, k = 0; //k用于记录是否为s1中重复出现
gets(s1);
gets(s2);
for(; i < strlen(s1); ++i)
{
if(k & (1 << s1[i]))
{
continue;
}
else
{
k |= (1 << s1[i]);
}
for(j = 0; j < strlen(s2); ++j)
{
if(s1[i] == s2[j])
{
//相同的字符
break;
}
}
if(j == strlen(s2))
{
//找到不同时出现的字符,如果处理你自己看着办。
}
}
return 0;
}