字符串判等【C语言实现】
#Description
问题描述:
判断两个由大小写字母和空格组成的字符串在忽略大小写,且忽略空格后是否相等。
Input
两行,每行包含一个字符串。
Output
若两个字符串相等,输出YES,否则输出NO。
Sample Input
a A bb BB ccc CCC
Aa BBbb CCCccc
Sample Output
YES
#思路
1.去掉空格
2.判断字符串长度是否相等,不等,则为NO,相等则继续进行判断
3.改变字符串大小写
4.给字符串排序
5.用strcmp函数直接进行判断
#CODE
代码如下
#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
int len1,len2;
char line1[100]={'0'},line2[100]={'0'},line3[100]={'0'},line4[100]={'0'};//初始化字符串
char t;
gets(line1);
gets(line2);
len1=strlen(line1);
len2=strlen(line2);
int i,j;
j=0;
for(i=0;i<len1;i++)
{
if(line1[i]!=' ')
{
line3[j]=line1[i];
j++;
}//把Line1去掉空格给line3
}
j=0;
for(i=0;i<len2;i++)
{
if(line2[i] != ' ')
{
line4[j++]=line2[i];
} //把line2去掉空格给line4
}
len1=strlen(line3);
len2=strlen(line4);
if(len1 != len2 )//长度不等直接判断为NO
{
printf("NO") ;
return 0;
}
for(i=0;i<len1;i++)
{
if(line3[i]>='A'&&line3[i]<='Z')
{
line3[i]=line3[i]+32; //A与a相差32,实际上是把大写全变为小写
}
if(line4[i]>='A'&&line4[i]<='Z')//在一个循环里对两个line进行处理
{
line4[i]=line4[i]+32;
}
}
for(i=1;i<len1;i++)//冒泡排序,通过ASCII码进行比较
{
for(j=0;j<len1-i;j++)
{
if(line3[j]>line3[j+1])
{
t=line3[j];
line3[j]=line3[j+1];
line3[j+1]=t;
}
if(line4[j]>line4[j+1]) //在一个循环,对两个line进行处理,减小时空复杂度
{
t=line4[j];
line4[j]=line4[j+1];
line4[j+1]=t;
}
}
}
if(strcmp(line3,line4)==0)//strcmp 函数,对两个字符串进行判断
{
printf("YES");//出结果
}
else
{
printf("NO");
}
return 0;
}