C语言如何判断两个字符串大小写是否一致,有哪些实现方法
问题解答
核心结论
C语言没有专门的关键字或者内置标准库函数可以直接检测两个字符串的大小写是否一致,需要自行实现判断逻辑。
现有代码的问题
你写的代码存在多个逻辑错误,无法正确实现功能:
- 第一次循环就会直接返回结果,根本不会遍历后续字符:只要第一个字符的大小写属性相同,直接返回1,不会检查剩余字符是否符合规则
- 两个判断条件逻辑重复:
(是否为小写的判断结果相等)和(是否为大写的判断结果相等)本身是等价的,不需要分开判断 - 循环结束后没有定义返回值:如果两个字符串长度不同,短字符串遍历结束后循环终止,函数没有返回任何值,会触发未定义行为
- 不符合你给出的示例规则:你给出的示例1中两个字符串长度不同,但只要所有字符都是大写就返回SAME,你的代码按位遍历的逻辑无法适配这种场景
可行实现方案
根据你给出的示例,规则可明确为:两个字符串的所有字母都统一为大写 或者 都统一为小写时,返回SAME,否则返回NOT SAME。如果需要兼容非字母字符,可自行调整逻辑跳过非字母的判断。
参考代码
#include <ctype.h> // 辅助函数:返回字符串大小写类型,0=混写,1=全大写,2=全小写 int getStrCaseType(char str[]) { int hasUpper = 0, hasLower = 0; for (int i = 0; str[i] != '\0'; i++) { // 仅判断字母字符,非字母直接跳过 if (isalpha(str[i])) { if (isupper(str[i])) hasUpper = 1; else hasLower = 1; // 已同时出现大小写,提前返回混写 if (hasUpper && hasLower) return 0; } } if (hasUpper) return 1; if (hasLower) return 2; // 全是非字母字符的场景可根据需求调整返回值,这里默认归为全大写类 return 1; } int areSameCase(char str[], char str1[]) { return getStrCaseType(str) == getStrCaseType(str1); }
使用说明
调用areSameCase函数,返回1则输出SAME,返回0则输出NOT SAME,完全符合你给出的两个示例的判断规则。代码用到了ctype.h头文件的字符判断函数,比手动判断ASCII范围兼容性更强、写法更简洁。
内容的提问来源于stack exchange,提问作者imPravinKumar
相关产品推荐
相关产品推荐

