在两个字符串中找字符 哪位大神帮忙答一下这道C语言题目啊

编写程序:从键盘输入两个字符串,找出其中没有同时出现在两个字符串中的字符。
例如:输入串1:abca 串2:bcd
输出:ad
在网上找过了,都不能通过测试例2
一楼的这个答案还不对

第1个回答  2015-06-09
//方法,找出同时在两个数组中出现的字母,做标记,剩下的就是本题结果。

void GetDiffChar( char* str1, char* str2, char* strOut)
{
const int nCout1 = strlen(str1);
const int nCout2 = strlen(str2);

for(int i=0; i<nCout1; i++)
{
char ch = str1[i];
for(int j=0; j<nCout2; j++)
{
if (str2[j] == ch)
{
str1[i] = 0xff; // mark
str2[j] = 0xff;
break;
}
}
}

//out
int nOutIndex = 0;
for(int i=0; i<nCout1; i++)
{
if(((unsigned char)str1[i]) != 0xff)
{
strOut[nOutIndex++] = str1[i];
}
}

for(int i=0; i<nCout2; i++)
{
if(((unsigned char)str2[i]) != 0xff)
{
strOut[nOutIndex++] = str2[i];
}
}
}

int main(void)
{
char str1[] = "1245678";
char str2[] = "943518";
char strOut[100] = {0};
GetDiffChar(str1, str2, strOut);
printf(strOut);

return 0;
}追问

字符串是要手动输入的,不是定义的

追答

void GetDiffChar( char* str1, char* str2, char* strOut)
{
const int nCout1 = strlen(str1);
const int nCout2 = strlen(str2);

for(int i=0; i<nCout1; i++)
{
char ch = str1[i];
for(int j=0; j<nCout2; j++)
{
if (str2[j] == ch)
{
str1[i] = 0xff; // mark
str2[j] = 0xff;

}
}
}

//out
int nOutIndex = 0;
for(int i=0; i<nCout1; i++)
{
if(((unsigned char)str1[i]) != 0xff)
{
strOut[nOutIndex++] = str1[i];
}
}

for(int i=0; i<nCout2; i++)
{
if(((unsigned char)str2[i]) != 0xff)
{
strOut[nOutIndex++] = str2[i];
}
}
}

int main(void)
{
char str1[100] = {0};
char str2[100] = {0};
printf("Please input the first string:");
scanf("%s", str1);

printf("Please input the second string:");
scanf("%s", str2);

char strOut[100] = {0};
GetDiffChar(str1, str2, strOut);
printf(strOut);

return 0;
}

本回答被提问者采纳
第2个回答  推荐于2016-08-13
#include "stdio.h"
#include "string.h"
//从键盘输入两个字符串,找出其中没有同时出现在两个字符串中的字符。
//eg: abcd&&bdfg -------- abfg
main()
{
char a[100];
char b[100];
char c[100] = {0};
char d[100] = {0};
printf("请输入字符串a:\n");
scanf("%s", a);
printf("请输入字符串b:\n");
scanf("%s", b);
int n = strlen(a);
int m = strlen(b);
int k = 0;
int i, j;
for(i = 0; i < n; ++i) //选出字符串a中独有的字符
{
int judge = 1;
for(j = 0; j < m; ++j)
{
if(a[i] == b[j])
{
judge = 0;
return 0;
}
}
if(judge == 0)
continue;
c[i] = a[i];
}
for(i = 0; i < m ; ++i) //选出字符串b中独有的字符
{
int judge = 1;
for(j = 0; j < n; ++j)
{
if(b[i] == a[j])
{
judge = 0;
return 0;
}
}
if(judge == 0)
continue;
d[i] = b[i];
}
int n1 = strlen(c);
for(i = 0; i < n1; ++i)
printf("%c", c[i]);
int n2 = strlen(d);
for(i = 0;i < n2; ++i)
printf("%c", d[i]);
}追问

我测试了,可以编译成功,但是什么都没输出啊,大神,求帮忙修改下

追答

如果还不行,那大概就是编译器的不同了,我用的是vc++6.0

追问

  我按照你的写进去,最后结果就这样了

不过还是很感谢你😊

追答

你这什么编译环境?没见过啊

追问

dev-c

相似回答