发布时间:2024-06-21 12:01
在使用字符串处理函数前,需要在程序开头使用编译预处理命令 #include
(六)字符串比较函数 strcmp()
函数调用格式:strcmp(str1,str2);
函数功能:按字典序比较字符串 str1 和 str2 的大小。
比较规则:将两个字符串自左向右逐个字符进行ASCLL码大小比较,直到出现不同字符或遇'\0'停止;
若全部字符相同,返回 0 值;
若出现第一对不同字符,计算其ASCII之差;
ASCII之差为正整数,则 str1 > str2 ,返回值为1;
ASCII之差为负整数,则 str1 < str2 ,返回值为-1;
注意:字符串 str1 和 str2 的比较不能用条件表达式 str1 > str2 之类的表示。
//strcmp()函数演示
#include
#include
int main()
{
char str_1[2][20] = { "China","China" }; //全部字符相同
char str_2[2][20] = { "China n","China b" }; //第一对不同字符'n'、'b',即'\110'、'\98'
char str_3[2][20] = { "China N","China b" }; //第一对不同字符'N'、'b',即'\78'、'\98'
int result_1, result_2, result_3;
//比较二维数组str中的两个字符串,并把其返回值赋值给result。
result_1 = strcmp(str_1[0], str_1[1]);
printf("%d\n", result_1); //返回值为0
result_2 = strcmp(str_2[0], str_2[1]);
printf("%d\n", result_2); //返回值为1
result_3 = strcmp(str_3[0], str_3[1]);
printf("%d\n", result_3); //返回值为-1
return 0;
}
//突发奇想,用这个strcmp()函数比较中文字符
#include
#include
int main()
{
char str_1[2][20] = { "我爱中国","我爱中国" }; //全部字符相同
char str_2[2][20] = { "中","国" }; //不同中文字符'中'、'国',即'D6D0'、'B9FA'
char str_3[2][20] = { "统","一" }; //不同中文字符'统'、'一',即'CDB3'、'D2BB'
int result_1, result_2, result_3;
//比较二维数组str中的两个字符串,并把其返回值赋值给result。
result_1 = strcmp(str_1[0], str_1[1]);
printf("%d\n", result_1); //两字符串相同,返回值为0
result_2 = strcmp(str_2[0], str_2[1]);
printf("%d\n", result_2); //'D6D0' > 'B9FA',返回值为1
result_3 = strcmp(str_3[0], str_3[1]);
printf("%d\n", result_3); //'CDB3' < 'D2BB',返回值为-1
return 0;
}
中文字符集GB18030编码方案于2000年发布第一版,收录汉字27533个;
2005年发布第二版,收录汉字70000余个,以及多种少数民族文字。
GB18030采用单字节、双字节、四字节分段编码。
汉字GB国际编码查询:https://www.qqxiuzi.cn/bianma/guobiaoma.php
ps:中文字符的比较方法和英文差不多,都是自左向右逐个比较,直到遇到第一对不同字符,
比较其GB编码的大小。
经过一些粗略的查阅资料,GB编码是由汉字字符的区位码转化为十六进制得来的
一些相关链接:https://www.cnblogs.com/leesf456/p/5317574.html
https://zhuanlan.zhihu.com/p/46216008
https://cloud.tencent.com/developer/article/1343240