例1 :
• 问题: 设计实现串比较运算的算法
如何比较串 ,我们首先制定一下规则 ,然后根据规则再设计算法
• ABCD 和 ACC
先比较两个字符串的共同长度的部分, 两个串从开头进行逐个比较 , 当 第二个串第二个字符 比 第一个串的第二个字符大时, 我们就跳出, 然后说 , ABCD < ACC
• AC 和 ACA
两个字符串共同的部分 ,都相等 ,然后我们看两个字符串的长度 ,哪个长 ,哪个就大
跳出 , AC < ACA
• ABCD 和 ABCD
两个字符串 共同长度是 4, 然后逐个对比 ,对比完后 , 发现都相等 ,然后就比较两个字符串的长度 ,相同,就跳出 , ABCD = ABCD
• 算法思路
(1) 比较 s 和 t 两个串共同长度范围内的对应的字符:
① 若 s 的字符 > t 的字符 , 返回 1;
② 若 s 的字符 < t 的字符 , 返回 -1;
③ 若 s 的字符 = t 的字符 , 则按照上述规则继续比较.
(2) 当(1) 中 对应的字符均相同时 , 比较 s 和 t 的长度:
① 两个长度相等 ,返回0;
② s 的长度 > t 的长度 , 返回 1;
③ s 的长度 < t 的长度 , 返回 -1;
如上图 ,算法演示:
算法实现:
//传入要比较的两个字符串
int Strcmp(SqString s, SqString t) {//定义计数器 和 共同两者共同长度
int i, comlen;//求 s 和 t 的共同长度 (长度相对较短的字符串的长度即为共同长度, 相等的话,包含在第二种else 了)
if(s.length < t.length) { comlen = s.length; } else { comlen = t.length; }// 在共同长度内逐个字符比较
for(i = 0; i < comlen; i++) { if(s.data[i] > t.data[i]) { return 1; } else if(s.data[i] < t.data[i]) { return -1; } }// 共同长度内对应字符均相同时 , 比较 s 和 t 的长度
if(s.length == t.length) { return 0; //s == t } else if(s.length > t.length) { return 1; //s > t } else { return -1; //s < t } }