7-1 A-B
分数 20
作者 陈越
单位 浙江大学
本题要求你计算A−B。不过麻烦的是,A和B都是字符串 —— 即从字符串A中把字符串B所包含的字符全删掉,剩下的字符组成的就是字符串A−B。
输入格式:
输入在2行中先后给出字符串A和B。两字符串的长度都不超过104,并且保证每个字符串都是由可见的ASCII码和空白字符组成,最后以换行符结束。
输出格式:
在一行中打印出A−B的结果字符串。
输入样例:
I love GPLT! It's a fun game!
aeiou
输出样例:
I lv GPLT! It's fn gm!
代码长度限制
16 KB
时间限制
150 ms
内存限制
64 MB
//这题主要一个思路,遍历第1个字符串。然后并列第2个字符串中的每一个字符,若与第1个字符串中的字符相同,则不做任何操作,如果不同则输出,鉴于这个思路可以使用strchr函数,strchr函数是C语言中的一个字符串处理函数,主要用于在一个字符串中查找指定字符的首次出现位置。如果找到该字符,则返回指向该字符的指针;如果没有找到,则返回NULL。简而言之,可以寻找两个字符串中相同的字符。并进行操作
#include<stdio.h>
#include<string.h>
int main()
{
char a[10010]={0};
char b[10010]={0};
gets (a);
gets (b);
for(int i=0;i<10000;i++)
{
if(strchr(b,a[i])
{
;
}
else{
printf("%c",a[i]);
}
}
return 0;
}
但是在运行过程中发现有两个报错,未找到原因,所以就想了另一种思路,但是后来才发现是数组给的范围小了(这都是后话,后来修改过了)
另一种思路就是遍历第一二个字符串,判断字符是否相同,如果相同将字符替换为0,此时输出的字符串中,相同的位置都用0代替,然后第2遍遍历该字符串,将其中替换的字符删除即可,后来发现还是有问题,在查找资料过程中不断尝试,最后才发现是数组给的小了,但是题目上面说字符串不超过10的4次方,我也不懂为什么1万不行。后来修改数组范围之后,两种方法都通过了测试 ,都是可行的。
#include<stdio.h>
#include<string.h>
int main()
{
char a[10010];
char b[10010];
gets(a);
gets(b);
int i,j;
for(i=0;i<strlen(a);i++) //strlen为长度函数
{
for(j=0;j<strlen(b);j++)
{
if(a[i]==b[j])
{
a[i]='0';
}
}
}
for(i=0;i<strlen(a);i++)
{
if(a[i]!='0')
{
printf("%c",a[i]);
}
}
return 0;
}