在线编译器 C

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

代码先读取两个字符串,然后去除第一个字符串末尾可能存在的换行符。接着逐个字符比较,如果发现不同就立即输出位置并结束。如果比较完所有字符都相同,再根据是否同时到达字符串结尾来判断是完全相同还是其中一个字符串是另一个的前缀。

- 注意第二个字符串的换行符没有被去除。当第一个字符串比第二个短时,比较到第一个字符串结尾时,第二个字符串对应位置可能是换行符,这会导致输出位置比预期多1。你需要考虑如何处理第二个字符串末尾的换行符。
- 代码中第一个循环单独计算了s1的长度并处理换行符,但第二个字符串没有类似处理。你可以思考是否需要在比较前统一处理两个字符串的换行符,或者调整比较逻辑来避免换行符的影响。