C语言中对字符的比较依赖的是字符的编码,默认使用了ASCII作为编码标准,每一个字符都对应了一个整数值。比如字符'0’的ASCII值是48,'A’的ASCII值是65,'a’的ASCII值是97。字符之间大小比较时,会对它们的编码值进行比较,'A'是小于'B'的,'A'是小于'a'等等。
那么字符串之间可以比较大小吗?字符串"China"与"America"哪个大呢?
这个回答是肯定的,在 C 语言中,我们通常遵循的是一种特殊的定义——字典序。
我们通过例子理解下字典序:
对于字符串"abc"和"bbc"的大小关系——我们首先会对它们的第一个字符进行比较, 我们发现第一个字符'a' < 'b'时,我们就可以明确"abc" < "bbc"的结论。
对于字符串"abc"和"abd"的大小关系——我们首先会对它们的第一个字符进行比较,如果第一个字符相同,则会接下来比较第二个字符;如果第二个字符相同,则会接下来比比较第三个字符;当我们发现第三个字符'c' < 'd'时,我们就得到了"abc" < "abd"的结论。
对于字符串"abc"和"ab"的大小关系——我们首先会对它们的第一个字符进行比较,如果第一个字符相同,则会接下来比较第二个字符;如果第二个字符相同, 则会接下来比较第三个字符;当我们发现"ab"没有第三个字符时,我们就得到了"ab" < "abc"的结论。
通过例子,我们可以总结:
字典序遵循的是逐字符比较的方式,越靠左的字符越会被先比较。
逐字符比较过程中,一旦发现某一对被比较的字符之间不相等时,这一对字符的大小关系即为这一对字符串的大小关系。
逐字符比较过程中,一旦出现某一个字符串的所有字符都已经经过比较,而另一字符串还存在未被比较的字符时,较短的字符串更小。
如果所有字符串内的字符都被发现相等,则这两个字符串相等。
因此,我们也可以回答前面的问题啦!字符串"China"是大于"America"的。
老师希望通过程序比较两个字符串的大小,小可爱们,你们可以帮助他吗?
在处理字符串的标准库中,有一个函数strcmp(表示 string compare)用于比较字符串。
#include <stdio.h>
int main()
{
char string[100] = "hello";
char input1[100] = "He";
char input2[100] = "hello";
char input3[100] = "zoo";
if(strcmp(input1,string)
{
printf("\"%s\" is less than \"%s\"\n",input1,string);
}
if(strcmp(input2,string)
{
printf("\"%s\" equals \"%s\"\n",input2,string);
}
if(strcmp(input3,string)
{
printf("\"zoo\" is greater than \"hello\"\n"); }
return 0;
}
要求输出结果为: