在两个字符串中找字符 哪位大神帮忙答一下这道C语言题目啊
编写程序:从键盘输入两个字符串,找出其中没有同时出现在两个字符串中的字符。例如:输入串1:abca串2:bcd输出:ad在网上找过了,都不能通过测试例2#include"...
编写程序:从键盘输入两个字符串,找出其中没有同时出现在两个字符串中的字符。
例如:输入串1:abca 串2:bcd
输出:ad
在网上找过了,都不能通过测试例2
#include "stdio.h"#include "string.h"//从键盘输入两个字符串,找出其中没有同时出现在两个字符串中的字符。//eg: abcd&&bdfg -------- abfgmain(){ 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]);}
这个在Dev-c++能编译,但是什么都无法输出,请问怎么改? 展开
例如:输入串1:abca 串2:bcd
输出:ad
在网上找过了,都不能通过测试例2
#include "stdio.h"#include "string.h"//从键盘输入两个字符串,找出其中没有同时出现在两个字符串中的字符。//eg: abcd&&bdfg -------- abfgmain(){ 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]);}
这个在Dev-c++能编译,但是什么都无法输出,请问怎么改? 展开
1个回答
展开全部
你给的程序中,若两个字符串有相等的字符,会直接返回,所以不输出,即39行处:
if(b[i] == a[j])
{
judge = 0;
return 0;
}
下面的程序从文件中获取输入,注释掉freopen那行即可变为从控制台获取输入(提交时应该要注释掉)。
另外,此程序的复杂度是O(N^2),最好给出原题,可以帮你判断时间复杂度能否通过测试。
#include <cstdio>
const int maxn = 10000;
char sa[maxn], sb[maxn];
int main()
{
freopen("data.in", "r", stdin);
scanf("%s", sa);
scanf("%s", sb);
// a的每个字符
for(int i = 0; sa[i]; ++i) {
int j;
for(j = 0; sb[j]; ++j)
if(sa[i] == sb[j]) break;
if(!sb[j]) putchar(sa[i]);
}
// b的每个字符
for(int i = 0; sb[i]; ++i) {
int j;
for(j = 0; sa[j]; ++j)
if(sb[i] == sa[j]) break;
if(!sa[j]) putchar(sb[i]);
}
puts("");
return 0;
}
更多追问追答
追问
嗯,我最上面给的就是原题,测试的时候是系统自动输入上面的那两个用例
你上面给的那个程序在dev-c++里也运行不了,能帮忙修改一下吗
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询