AcWing 768. 忽略大小写比较字符串大小
原题链接
简单
作者:
古娜拉黑暗之神
,
2021-02-19 10:34:32
,
所有人可见
,
阅读 242
#include<iostream>
#include<string>
#include<cmath>
using namespace std;
int main(){
string a,b;
getline(cin,a);
getline(cin,b); //题目说明是有空格
/* 这种直接法 逻辑比较多,暂时没想出来
for(int i=0;a[i]==b[i]||abs(a[i]-b[i])==32;i++){
if(abs(a[i]-b[i])<32){
cout<<"<"<<endl;
return 0;
}else if(abs(a[i]-b[i])>32){
cout<<">"<<endl;
return 0;
}else if(abs(a[i]-b[i]) == 32){
cout<<"="<<endl;
return 0;
}
}
*/
//将大写转化成小写,再比较
for(int i=0;i<a.size();i++){
if(a[i]>='A' && a[i]<='Z'){
a[i] +=32;
}
}
for(int i=0;i<b.size();i++){
if(b[i]>='A' && b[i]<='Z'){
b[i] +=32;
}
}
for(int i=0;i<max(a.size(),b.size());i++){ //需要考虑到两个字符串长度不一样的情况,短的字符串最后一个是'\0,也能比
if(a[i] > b[i]){
cout<<">"<<endl;
return 0;
}else if(a[i] < b[i]){
cout<<"<"<<endl;
return 0;
}
}
cout<<"="<<endl;
return 0;
}
我也是按照注释的方法想的,但是题目有个缺陷就是大写X跟小写f相比时,大写的X是等于x的ascll码的,导致不能直接将大写的X与小写的f比较,因为它会视为X的ascll码为小写的x的ascll码,即最终结果是>,但是明显大写的Xascll码是小于f的,所以用注释的方法并不能直接比较,还是需要手动转换下字符的大小写