po3a  

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

 

 

函数功能概述

StrCompare 函数的作用是比较两个字符串 S 和 T 的大小关系。按照字典序(字符在 ASCII 码表中的顺序)比较,若 S > T ,返回值大于 0 ;若 S = T ,返回值等于 0 ;若 S < T ,返回值小于 0 。

执行步骤

  1. 循环遍历字符
    函数通过 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' 。
  2. 处理字符全部相同的情况
    如果循环结束后,都没有出现字符不相等的情况,说明两个字符串前面的字符都相同。此时,根据注释 “扫描过的所有字符都相同,则长度长的串更大” ,函数返回 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 。

  1. 进入 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 。

  1. 进入 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' ,继续循环。
  2. 循环结束后(因为 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 。

  1. 进入 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' ,继续循环。
  2. 循环结束后(i = 6 时,i>S.length 且 i>T.length ),进入 return S.length - T.length ,即 5 - 5 = 0 ,返回值等于 0 ,表明字符串 S 等于字符串 T 。
  3.  

 

posted on 2025-06-30 23:34  po3a  阅读(23)  评论(0)    收藏  举报