如何实现两字符数组同索引元素逐一比较(不调用库函数)
问题分析与修正方案
你的核心问题是用了嵌套循环,导致s1的每个字符都会和s2的所有字符逐一对比,而不是按索引位置一一对应。下面直接给你修正后的实现,再拆解问题点:
修正后的代码
int compare(char *s1, char *s2){ char *p = s1; char *q = s2; // 同步遍历两个数组的同位置元素 while (*p != '\0' && *q != '\0') { int diff = *p - *q; if (diff < 0) { return -1; // s1当前字符小于s2对应位置 } else if (diff > 0) { return 1; // s1当前字符大于s2对应位置 } // 字符相等时,同时移动两个指针到下一个位置 p++; q++; } // 处理其中一个数组未遍历完的情况(长度不同) if (*p != '\0') { return 1; // s1更长,剩余字符大于空字符 } else if (*q != '\0') { return -1; // s2更长,s1对应位置是空字符,更小 } // 两个数组完全相同 return 0; }
原代码的问题拆解
- 嵌套循环逻辑错误:外层循环遍历s1的每个字符,内层循环每次都从s2的起始位置重新开始遍历,这直接导致了"两两对比"的错误行为,完全偏离了同索引对比的需求。
- 提前返回逻辑错误:内层循环里的
return x会在第一次字符对比后就直接返回函数,根本无法遍历后续的字符。 - 差值判断错误:原代码里的
else if(x > 1)是多余且错误的,只要差值大于0,就应该返回1,不需要限制大于1。 - 指针自增位置错误:
q++放在外层循环末尾,但内层循环每次都会把q重置为s2的起始地址,这个自增操作完全无效。
内容的提问来源于stack exchange,提问作者mtom
相关产品推荐
相关产品推荐

