题目:
判断两个由大小写字母和空格组成的字符串在忽略大小写,且忽略空格后是否相等。
Input:两行,每行包含一个字符串。
Output:若两个字符串相等,输出YES,否则输出NO。
Sample
Inputcopy | Outputcopy |
---|---|
a A bb BB ccc CCC Aa BBbb CCCccc | YES |
法1:定义2个额外的字符数组(字符串)s3,s4,用于储存非空格的字符,最终逐个比较s3、s4
代码:
#include<stdio.h>
#include<string.h>
int main(){
char s1[10000],s2[10000],s3[10000],s4[10000];
gets(s1);gets(s2);
int len1=strlen(s1),len2=strlen(s2),i,is=0,j=0,k=0,max=len1;
if(len2>len1)max=len2;
for(i=0;i<max;i++){
if(s1[i]!=' '){
s3[j++]=s1[i];
}
if(s2[i]!=' '){
s4[k++]=s2[i];
}
}
for(i=0;i<max;i++){
if(s3[i]>='A'&&s3[i]<='Z'){
s3[i]+=32;
}
if(s4[i]>='A'&&s4[i]<='Z'){
s4[i]+=32;
}
if(s3[i]!=s4[i]){
is=1;break;
}
}
puts(s3);puts(s4);
if(is==1){
printf("NO");
}else{
printf("YES");
}
return 0;
}
法2:
定义一个字符数组b初始化为0,用来存放所有ascii中存入的值,逐个输入第一个字符串的字符,并将其所对应的ascii逐次+1。然后输入第二个字符串的字符,并将其对应的ascii逐次-1。最后判断如果字符数组b的所有值都为0,则说明第一个字符串所有字符都存在于第二个字符串,且所有第二个字符串所有字符都存在于第一个字符串,即两个字符串中的字符相等。
#include<stdio.h>
#include<string.h>
int main(){
int i=1,j=1,a[130]={0},r,n,p;
while((r=getchar())!='\n'){
if(r>32){
p=r;
if(p>=65&&p<=90){
p+=32;
}
a[p]+=1;
}
}
while((r=getchar())!='\n'){
if(r>32){
p=r;
if(p>=65&&p<=90){
p+=32;
}
a[p]-=1;
}
}
int is=0;
for(i=65;i<130;i++){
if(a[i]!=0){
printf("NO");
is=1;
break;
}
}
if(is==0){
printf("YES");
}
return 0;
}
但是抛开此题,法2有一个问题,便是当字符串一与字符串二并不是一一对应的
比如s1="ababab" s2="aaabbb"此时,尽管字符s1与s2不是一一对应的,但法2会认为这两个字符串相等,当然对于这个题没有什么影响