在线编译器 C

#include <stdio.h> int main() { char str1[1000], str2[1000]; scanf("%1000[^\n]", str1); scanf("\n"); scanf("%1000[^\n]", str2); int i = 0; while (str1[i] != '\0' && str2[i] != '\0') { if (str1[i] != str2[i]) { printf("%d\n", i); return 0; } i++; } if (str1[i] == '\0' && str2[i] == '\0') { printf("-1"); } else { printf("%d", i); } return 0; }
这段代码的功能是比较两个字符串,输出它们第一个不同字符的位置(从0开始计数)。如果两个字符串完全相同,则输出-1。

代码的主要逻辑是:先读取两行字符串,然后逐个字符比较,找到第一个不同的位置就输出并结束。如果循环结束还没找到不同,再检查是否两个字符串都结束了(完全相同)还是其中一个先结束。

- 注意第二个字符串的读取方式:`scanf("\n")` 的作用是消耗第一行末尾的换行符,但这种方法可能不够可靠。如果第一行输入后有多余空白字符,可能会导致第二个字符串读取异常。
- 当两个字符串长度不同时,循环会在较短的字符串结束时退出,此时 `str1[i]` 和 `str2[i]` 中一个是结束符 `\0`,另一个是有效字符。你的代码在循环后处理这种情况,但输出的是 `i`,这个位置正好是较短字符串结束的位置,也就是第一个不同的位置,逻辑是正确的。不过需要确认题目要求的位置定义是否包含这种情况。