在线编译器 C

#include <stdio.h> int main() { char a[1001] = {0}, b[1001] = {0}; int len1 = 0, len2 = 0; scanf("%s%s", a, b); for (int i = 0; a[i] != '\0'; i++) { len1++; } for (int i = 0; b[i] != '\0'; i++) { len2++; } if (len1 < len2) { for (int i = 0; i < len1; i++) { if (a[i] != b[i]) { printf("%d", i); return 0; } } printf("%d", len1); return 0; } else if (len1 >= len2) { for (int i = 0; i < len2; i++) { if (a[i] != b[i]) { printf("%d", i); return 0; } } printf("%d", len2); return 0; } printf("%d", -1); return 0; }
这段代码的功能是比较两个字符串,并输出它们第一个不同字符的位置(从0开始计数)。如果其中一个字符串是另一个的前缀,则输出较短字符串的长度。

代码中有一个逻辑问题:当 len1 >= len2 时,循环只遍历到 len2-1,但如果 len1 大于 len2 且前 len2 个字符都相同,程序会输出 len2。但此时如果 len1 等于 len2,输出 len2 是正确的;如果 len1 大于 len2,输出 len2 也是正确的(因为较短字符串结束)。然而,当 len1 等于 len2 且所有字符都相同时,程序会输出 len2,但题目可能期望输出 -1 表示完全相同?你需要确认题目要求。

- 检查当两个字符串完全相同时,你的代码会输出什么?是否应该输出 -1?
- 注意你的条件分支:当 len1 >= len2 时,你处理了 len1 等于 len2 和 len1 大于 len2 两种情况,但输出逻辑是一样的。考虑一下如果两个字符串完全相同,你的代码会进入哪个分支,输出什么。