题目描述
一般我们用strcmp可比较两个字符串的大小,比较方法为对两个字符串从前往后逐个字符相比较(按ASCII码值大小比较),直到出现不同的字符或遇到’\0’为止。
如果全部字符都相同,则认为相同;如果出现不相同的字符,则以第一个不相同的字符的比较结果为准。
但在有些时候,我们比较字符串的大小时,希望忽略字母的大小,例如”Hello”和”hello”在忽略字母大小写时是相等的。
请写一个程序,实现对两个字符串进行忽略字母大小写的大小比较。
输入格式
输入为两行,每行一个字符串,共两个字符串。注意字符串中可能包含空格。
数据保证每个字符串的长度都不超过80。
输出格式
如果第一个字符串比第二个字符串小,输出一个字符”<”。
如果第一个字符串比第二个字符串大,输出一个字符”>”。
如果两个字符串相等,输出一个字符”=”。
样例
输入样例:
Hello
hello
输出样例:
=
算法1
C++ 代码
#include<iostream>
using namespace std;
int main()
{
string a,b;
getline(cin,a);
getline(cin,b);
for(auto &c:a) c = tolower(c);
for(auto &c:b) c = tolower(c);
if(a == b) cout << '=';
if(a > b) cout << '>';
if(a < b) cout << '<';
}
不用函数这样写也简洁
这样确实很简介
如果a[i]的ACSII为’Z’+1,而此时b[i]为’a’,是不是要出错了?
‘Z’+1都是符号来的,题目说的是单词应该不会输出特殊符号这种情况
还是有特殊字符的,随便测试一个就知道了,比如让我的len = lena
a[i],b[i],
是啥意思呢
a[i]表示的是比如一串字符:”absddt”
a[0]=a.a[1]=b…a[5]=t,这跟数组很像
再优化成这样更简洁
#include[HTML_REMOVED]
using namespace std;
int main()
{
string a,b;
getline(cin,a);
getline(cin,b);
for(auto &c:a) if(c<’a’) c = c + 32;
for(auto &s:b) if(s<’a’) s = s + 32;
if(a > b)cout << “>” << endl;
else if(a < b) cout << “<” << endl;
else cout << “=” << endl;
}
原来随手打的题解不知咋的就火了QAQ
但我觉得,这里变更字母大小写有点问题,不管是全变成了小写还是全变成了大写,对于大小写之间ASCII码对应的那几个符号来说,是变更了位置的。举例说明hellO应该是小于 hell]的,但是转成小写之后就变成了hello大于hell]了
这里的字符串应该是只包含字母的吧
我的gs代码:
tolower 在语法课哪里学过吗?
&c:a不理解这个
遍历a
看完感觉极其舒适!!太优美了,呜呜。
qaq,可能我的码风比较清新,喜欢的话推荐来主页@cht看看(无耻打广告)
牛
为啥没有#include[HTML_REMOVED]也能使用这个函数啊
你好厉害啊
这个思路其实挺好想到的,全部转换成大写或者全部转换成小写进行比较,不过我不知道右tolower这个函数
hh确实
我也不知道这个函数,所以我就是用的if(c>’a’ &&c<’z’) c-=32;
太牛了,大佬!!
我不是大佬hh
为什么用cin读入就是错的
因为题目中要求 “字符串中可能包含空格”,cin遇空格就停止读取输入了,这样空格后面的内容就赋给第二个字符串了,和代码本意就不同了
这种情况都是用getline
大佬能不能细说一下auto的用法,他是相当于一个迭代器吗,那个auto用了感觉代码可以精简好多
就是相当于让编译器自己看一下变量名
充分体现了
#### 不要重复造轮子的编程思想
赞一个
感谢
为什么加那个&
不加&只能使用字符串的值,加了&就可以使用和修改值
哦哦,好的,谢谢你
字符串为啥能用大于号和小于号
因为是用string类型的。string类型不同与char[ ],他是可以直接用大于小于号比较的
谢谢了,才开始学c++
人形函数库
大佬!!!!
tql
您tql