判断两个字符串是否相等(初学者精练)

题目:

判断两个由大小写字母和空格组成的字符串在忽略大小写,且忽略空格后是否相等。

Input:两行,每行包含一个字符串。

Output:若两个字符串相等,输出YES,否则输出NO。

Sample

InputcopyOutputcopy
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会认为这两个字符串相等,当然对于这个题没有什么影响

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值