一般我们用 strcmp 可比较两个字符串的大小,比较方法为对两个字符串从前往后逐个字符相比较(按 ASCII 码值大小比较),直到出现不同的字符或遇到 \0
如果全部字符都相同,则认为相同;如果出现不相同的字符,则以第一个不相同的字符的比较结果为准。
但在有些时候,我们比较字符串的大小时,希望忽略字母的大小,例如 Hello 和 hello
请写一个程序,实现对两个字符串进行忽略字母大小写的大小比较。
输入格式
输入为两行,每行一个字符串,共两个字符串。注意字符串中可能包含空格。
数据保证每个字符串的长度都不超过 80。
输出格式
如果第一个字符串比第二个字符串小,输出一个字符 <。
如果第一个字符串比第二个字符串大,输出一个字符 >。
如果两个字符串相等,输出一个字符 =。
输入样例:
Hello
hello
输出样例:
=
哎,这题多简单啊,磨了我这么久,做完这题我算是彻底了解strcmp函数了,后面我会分享一下我用c语言做这题的历程,和蓝色妖姬@渔家傲·秋思愣是看了一下午没看出来啥问题,假如你在用strcmp函数时遇到的问题,可以看看我后面的分享对你有没有帮助,源代码如下:
#include<stdio.h>
#include<string.h>
int main()
{
char ch[81];
char arr[81];
gets(ch);
gets(arr);
for (int i = 0; i < strlen(ch); i++)
{
if (65<=ch[i]&&ch[i]<=90) ch[i] += 32;
else continue;
}
for (int i = 0; i < strlen(arr); i++)
{
if (65 <= arr[i] && arr[i] <= 90) arr[i] += 32;
else continue;
}
if (strcmp(ch, arr) >0)
{
printf(">\n");
}
else if (strcmp(ch, arr) <0)
{
printf("<\n");
}
else printf("=\n");
return 0;
}
做题错误历程:
- 以后一定一定一定要记住if判断语句里面不能同时给出一个闭区间来判断,一开始我写成了if(65<=ch[i]<=90),当时看了许久不知道这一行出了啥问题,后面发现if语句里必须得分开写,即if(65<=ch[i]&&ch[i]<=90)
- 当我改好之后代码变成这样,当我以为即将成功时,还是有问题,于是我开始了二次排查,经过一个下午,找朋友看了许久的代码,楞是没看出有任何的问题,strcmp函数用来比较字符串长度?对啊?没有问题啊?我再加入strlen(ch)>strlen(arr)判断应该也不会出问题吧,而且更快,我特意在函数中插入printf("%d",strlen())来看看两个字符串长度
但我看到这个结果是,wok,这不是睁着眼睛说瞎话吗,第一个字符串比第二个长那么多,80明显比64大,标准答案告诉我小于????
后面我去找了好多别人的文章去寻找问题才发现,问题就出现在if后面的语句中
原来strcmp函数是比较两个字符串中第一个不同数的ASCll码差值来判断哪一个字符串更长的
stcmp函数不是比较字符串长度,记住,不是比较字符串长度!!!(这里说的是面相长度,就是用strlen出来的长度)
通过实践我也终于知道了strcmp函数的真理,如图所示,第一个字符串比第二个长吧!但返回了-1,原因是两个字符串第一个不同字母为b和c,b的ASCll码比c小,因此第一个字符串长度小于第二个字符串长度,在经过一个下午的摸爬滚打,看了无数的其他人的代码和文章,终于运行通过了
错误历程在这了,借此警示自己,也告诉他人不要和我犯同样的错