忽略大小写比较字符串大小(C语言)

一般我们用 strcmp 可比较两个字符串的大小,比较方法为对两个字符串从前往后逐个字符相比较(按 ASCII 码值大小比较),直到出现不同的字符或遇到 \0 为止。

如果全部字符都相同,则认为相同;如果出现不相同的字符,则以第一个不相同的字符的比较结果为准。

但在有些时候,我们比较字符串的大小时,希望忽略字母的大小,例如 Hellohello 在忽略字母大小写时是相等的。

请写一个程序,实现对两个字符串进行忽略字母大小写的大小比较。

输入格式

输入为两行,每行一个字符串,共两个字符串。注意字符串中可能包含空格。

数据保证每个字符串的长度都不超过 80。

输出格式

如果第一个字符串比第二个字符串小,输出一个字符 <

如果第一个字符串比第二个字符串大,输出一个字符 >

如果两个字符串相等,输出一个字符 =

输入样例:

输出样例:

哎,这题多简单啊,磨了我这么久,做完这题我算是彻底了解strcmp函数了,后面我会分享一下我用c语言做这题的历程,和蓝色妖姬@渔家傲·秋思愣是看了一下午没看出来啥问题,假如你在用strcmp函数时遇到的问题,可以看看我后面的分享对你有没有帮助,源代码如下:

#include

#include

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;

}

做题错误历程:

  1. 以后一定一定一定要记住if判断语句里面不能同时给出一个闭区间来判断,一开始我写成了if(65<=ch[i]<=90),当时看了许久不知道这一行出了啥问题,后面发现if语句里必须得分开写,即if(65<=ch[i]&&ch[i]<=90)

  1. 当我改好之后代码变成这样,当我以为即将成功时,还是有问题,于是我开始了二次排查,经过一个下午,找朋友看了许久的代码,楞是没看出有任何的问题,strcmp函数用来比较字符串长度?对啊?没有问题啊?我再加入strlen(ch)>strlen(arr)判断应该也不会出问题吧,而且更快,我特意在函数中插入printf("%d",strlen())来看看两个字符串长度

忽略大小写比较字符串大小(C语言)_第1张图片

但我看到这个结果是,wok,这不是睁着眼睛说瞎话吗,第一个字符串比第二个长那么多,80明显比64大,标准答案告诉我小于????

忽略大小写比较字符串大小(C语言)_第2张图片

后面我去找了好多别人的文章去寻找问题才发现,问题就出现在if后面的语句中

原来strcmp函数比较两个字符串中第一个不同数的ASCll码差值来判断哪一个字符串更长的

stcmp函数不是比较字符串长度,记住,不是比较字符串长度!!!(这里说的是面相长度,就是用strlen出来的长度)

忽略大小写比较字符串大小(C语言)_第3张图片

通过实践我也终于知道了strcmp函数的真理,如图所示,第一个字符串比第二个长吧!但返回了-1,原因是两个字符串第一个不同字母为b和c,b的ASCll码比c小,因此第一个字符串长度小于第二个字符串长度,在经过一个下午的摸爬滚打,看了无数的其他人的代码和文章,终于运行通过了

忽略大小写比较字符串大小(C语言)_第4张图片

错误历程在这了,借此警示自己,也告诉他人不要和我犯同样的错

你可能感兴趣的:(c++,c语言,算法)