我是一名信息学生(大学),我现在正在学习C语言。 我正在尝试做一些关于指针和字符串的练习。我找到了一个特定功能的广告练习,有助于使用指针比较2个字符串。 该函数的解决方案是:
int compare_strings( char *a, char *b){
int i = 0;
while( *( a + i ) != '\0' && *( b + i ) != '\0' ){
if( *( a + i ) < *( b + i ) ){
return -1;
} else if( *( a + i ) > *( b + i ) ){
return 1;
}
i++;
}
if( *( a + i ) == '\0' && *( b + i ) == '\0' ){
return 0;
} else if( ( a + i ) != '\0' ){
return 1;
} else {
return -1;
}
}
我真的不明白这个功能。字母字符怎么能比另一个字母字符“更多”呢?这是什么意思? 或者只是它是不正确的? 非常感谢你:))
答案 0 :(得分:2)
根据某种编码方案,每个字符都有其内部表示。例如,ASCII中的字符“A”存储为值65,“B” - 存储为66,依此类推。因此,当您比较字符时,会比较它们的内部代码。
所有都是计算机内的数字。:)并且有两个这样的数字:0和1.所有其他数字和符号(从人的角度来看)由这两个数字组成。
尝试下面的代码
会更清楚#include <stdio.h>
int main(void)
{
char c;
for ( c = 'A'; c <= 'Z'; ++c )
{
printf( "%d ", (int )c );
}
puts( "" );
return 0;
}
输出
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
考虑到当字符用作关系运算符的操作数时,它们会隐式转换为类型int,就像在我的程序中一样,我明确地将它们转换为int。
答案 1 :(得分:1)
在C中,与大多数语言一样,char
只是整数,使用某种表格(例如ASCII表格)或UTF-8
,UTF-16
进行转换等)。在ASCII中,您具有'A' = 0x41
或'a' = 0x61
(UTF-8
中的相同值,因为UTF-8
仅扩展ASCII表而不进行修改)。比较char
只是比较所谓的ASCII值(即使编码系统不总是ASCII值)。
在大多数(不是全部,请参阅chux评论)编码系统中,超出char
的整数值保持字母顺序,并将大写字母放在小写字母的较低位置,因此'A' < 'a'
和{{ 1}}甚至' ' < 'A'
。
比较字符串时,您比较所有字母,实际上返回第一个不同字符的结果,就像在字典中一样('0' < 'A'
在hello
之前manual
之前table
。 1}})。
答案 2 :(得分:0)
char
实际上只是一个1字节的数字,系统使用格式将其解释为一个字符(我相信它的ASCII,但我可能会非常错误,所以有人请纠正我,如果它&#39 ;不是这样的)。例如,在ASCII中:
a是97,b是98
A是65,B是66
等
所以你可以说&#39; a&#39; &LT; &#39; B&#39;和&#39; A&#39; &LT; &#39;一个&#39;它按字母顺序排列。