Онлайн компилятор 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。如果其中一个字符串是另一个的前缀,则输出较短字符串的长度。

代码中有一个逻辑问题需要注意:

- 当两个字符串长度相等时,代码会进入最后一个循环,如果所有字符都相同,输出-1,这是正确的。
- 但是当长度不等时,代码分别处理了len1<len2和len1>len2的情况,但在这两种情况下,如果较短字符串是较长字符串的前缀,输出的是较短字符串的长度,这个逻辑是正确的。然而,如果两个字符串长度不等且不是前缀关系,代码会在找到第一个不同字符时输出该位置,这个位置索引是基于较短字符串的,但题目可能要求基于较长字符串的索引?需要确认题目要求。

另外,代码中手动计算字符串长度的方法可以用标准库函数strlen替代,但这不是错误。

主要需要检查的是:当长度不等且不是前缀关系时,输出的位置索引是否应该基于较长字符串?例如,a="ab", b="abc",第一个不同字符是b[2]='c',但代码输出的是len1=2,这符合前缀情况。但如果a="ab", b="acd",第一个不同字符在位置1,代码会输出1,这是正确的。所以逻辑基本正确,但需要确认题目是否要求输出第一个不同字符的索引(从0开始),并且当一个是另一个的前缀时输出较短长度。