在线编译器 C

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

代码中存在一个逻辑问题:当其中一个字符串结束时,循环会停止,但此时并没有处理一个字符串是另一个字符串前缀的情况。例如,比较"abc"和"abcd"时,循环在i=3时因s1[3]为'\0'而停止,但此时没有输出结果。

- 循环条件只检查了两个字符串当前字符都不是'\0'的情况。当其中一个字符串先结束时,循环退出,但此时应该检查是否一个字符串是另一个的前缀,如果是,则输出较短字符串的长度作为第一个不同位置。
- 在循环结束后,需要处理一个字符串已经结束而另一个还有字符的情况,此时第一个不同位置就是较短字符串的长度。