Description
比较字符串大小,但比较的规则不同字典序规则。字符比较新规则如下:A < a < B < b < ………… < Z < z。
Input
输入数据包含多个测试实例,每个测试实例占两行,每一行有一个字符串(只包含大小写字母, 长度小于10000)。
Output
如果第一个字符串小于第二个,输出YES,否则,输出NO。
注意:A < a < B < b < ………… < Z < z。
Sample Input
abcBbcAbaABcefABce
Sample Output
YESYESNO
HINT
Source
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char a[10000],b[10000];
int main ()
{
memset( a , 0 , sizeof(a) );//重置为0
memset( b , 0 , sizeof(b) );
//多实例测试
while ( scanf("%s%s",&a,&b) != EOF )
{
int lena,lenb;
int i,temp;
lena = strlen(a); //a数组的长度
lenb = strlen(b); //b数组的长度
//比较函数,若a==b则返回0
if ( strcmp(a,b)==0 )
{
cout<<"NO"<<endl;
}
else
{
//找到数组最长的作为临界标志值
if ( lena>lenb )
temp=lena;
else
temp=lenb;
//找到任意一个符合if语句的输出"yes",然后break退出循环
for ( i=0 ; i<temp ; i++ )
{
if (a[i]==b[i]) //若相等i坐标下的数没有对比的价值,因而跳过
continue;//跳过本次i执行下一个i
else
{
//a、b数组在i位置下的数都是大写英文字母或者都是小写字母,a、b同类型的才可作比较
if ( a[i]>='a' && a[i]<='z' && b[i]>='a' && b[i]<='z' || a[i]>='A' && a[i]<='Z' && b[i]>='A' && b[i]<='Z' )
{
//若b[i]此时字母位置较a[i]靠后,则ASCII码较大
if ( a[i]<b[i] )
{ //满足题意的输出
cout<<"YES"<<endl;
break;
}
else
{
cout<<"NO"<<endl;
break;
}
}
//当a数组为小写字母,b数组为大写字母
else if ( a[i]>='a' && a[i]<='z' && b[i]>='A' && b[i]<='Z' )
{ //小写字母转换为大写字母ASCII码中减去32
if ( a[i]-32 < b[i] )
{
cout<<"YES"<<endl;
break;
}
else
cout<<"NO"<<endl;
break;
}
else if (a[i]>='A' && a[i]<='Z' && b[i]>='a' && b[i]<='z' )
{//大写化为小写字母作比较
if (a[i]+32<=b[i])
{
cout<<"YES"<<endl;
break;
}
else
{
cout<<"NO"<<endl;
break;
}
}
else
{
if ( a[i] < b[i] )
{
cout<<"YES"<<endl;
break;
}
else
{
cout<<"NO"<<endl;
break;
}
}
}
}
}
}
return 0;
}