Online Compiler C

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

代码的主要逻辑是:先读取两行字符串,然后逐个字符比较,直到遇到不同字符或某个字符串结束。最后根据比较结果输出位置或-1。

- 注意第一个scanf中的格式"%[^\n]\n"会读取一行后消耗掉换行符,但第二个scanf的格式"%[^\n]"不会消耗换行符。如果输入两行之间有多余空白,可能导致第二个字符串读取异常。建议检查输入读取是否可靠。
- 当两个字符串长度不同时,循环会在较短字符串结束时退出,此时s1[i]和s2[i]中一个是'\0'另一个不是,程序会输出较短字符串的长度,这符合预期吗?请思考题目要求是否应该输出这个长度。