Online Compiler 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; } for (int i = 0; i < len1; i++) { if (a[i] != b[i]) { printf("%d", i); return 0; } } printf("%d", -1); return 0; }
这段代码试图比较两个字符串,并输出它们第一个不同字符的位置(从0开始)。如果其中一个字符串是另一个的前缀,则输出较短字符串的长度。如果两个字符串完全相同,则输出-1。

代码中存在逻辑问题。当两个字符串长度相等且完全相同时,程序会进入 `len1 >= len2` 的分支,输出 `len2`,而不是预期的 `-1`。此外,最后的 `for` 循环和 `printf("%d", -1)` 实际上永远不会被执行到,因为前面的条件分支已经覆盖了所有情况并提前返回了。

- 检查当两个字符串完全相等时,程序应该输出什么。当前代码在 `len1 >= len2` 分支中,如果循环结束都没有发现不同,会输出 `len2`,但题目要求输出 `-1`。你需要区分“一个字符串是另一个的前缀”和“两个字符串完全相同”这两种情况。
- 注意 `else if (len1 >= len2)` 这个条件包含了 `len1 == len2` 的情况,而 `len1 > len2` 和 `len1 == len2` 的处理逻辑可能不同。考虑是否需要将相等的情况单独处理。