这一章,王道选择空出下标为零的数组,后面的函数设计也都基于此。(这样可以使字符的位置与数组的下标统一


函数功能概述
StrCompare 函数的作用是比较两个字符串 S 和 T 的大小关系。按照字典序(字符在 ASCII 码表中的顺序)比较,若 S > T ,返回值大于 0 ;若 S = T ,返回值等于 0 ;若 S < T ,返回值小于 0 。执行步骤
- 循环遍历字符
函数通过for循环来遍历两个字符串。循环条件是i小于等于字符串S的长度且小于等于字符串T的长度 ,即i<=S.length && i<=T.length,循环变量i从1开始(这里下标从1开始可能是自定义字符串存储方式相关,常规 C 语言字符串下标从0开始 )。
在每次循环中,使用if语句判断S.ch[i]和T.ch[i]是否不相等,即if (S.ch[i]!=T.ch[i])。如果不相等,就返回S.ch[i] - T.ch[i]。这是因为字符在计算机中以 ASCII 码存储,两个字符相减得到的差值能体现它们在字典序中的大小关系。比如'a' - 'b'结果小于0,表示'a'在字典序中小于'b'。 - 处理字符全部相同的情况
如果循环结束后,都没有出现字符不相等的情况,说明两个字符串前面的字符都相同。此时,根据注释 “扫描过的所有字符都相同,则长度长的串更大” ,函数返回S.length - T.length。若结果大于0,说明S的长度大于T,即S > T;若结果等于0,说明两个字符串长度相等且字符都相同,即S = T;若结果小于0,说明S的长度小于T,即S < T。
以下用具体例子说明
StrCompare 函数中两个字符串的比较过程:例子一:字符串字符不同
假设
S.ch = "apple" ,S.length = 5 ;T.ch = "banana" ,T.length = 6 。- 进入
for循环,i = 1时,比较S.ch[1](即'p')和T.ch[1](即'a') 。因为'p'的 ASCII 码值大于'a'的 ASCII 码值,'p' - 'a'结果大于0,函数直接返回S.ch[1] - T.ch[1],表明字符串S大于字符串T。
例子二:字符串字符相同但长度不同
假设
S.ch = "hello" ,S.length = 5 ;T.ch = "hell" ,T.length = 4 。- 进入
for循环,i从1开始依次比较:i = 1时,S.ch[1]和T.ch[1]都是'e',继续循环。i = 2时,S.ch[2]和T.ch[2]都是'l',继续循环。i = 3时,S.ch[3]和T.ch[3]都是'l',继续循环。i = 4时,S.ch[4]和T.ch[4]都是'o',继续循环。
- 循环结束后(因为
i = 5时,i>T.length),进入return S.length - T.length,即5 - 4 = 1,返回值大于0,表明字符串S大于字符串T。
例子三:字符串完全相同
假设
S.ch = "world" ,S.length = 5 ;T.ch = "world" ,T.length = 5 。- 进入
for循环,i从1开始依次比较:i = 1时,S.ch[1]和T.ch[1]都是'o',继续循环。i = 2时,S.ch[2]和T.ch[2]都是'r',继续循环。i = 3时,S.ch[3]和T.ch[3]都是'l',继续循环。i = 4时,S.ch[4]和T.ch[4]都是'd',继续循环。
- 循环结束后(
i = 6时,i>S.length且i>T.length),进入return S.length - T.length,即5 - 5 = 0,返回值等于0,表明字符串S等于字符串T。 -
![]()



浙公网安备 33010602011771号