在线编译器 C

#include <stdio.h> int main() { char a[1001],b[1001]; scanf("%[^\n] %[^\n]", a, b); char *pa, *pb; pa = &a[0]; pb = &b[0]; int COUNT = 0; while(*pa == *pb && *pa != '\0') { pa++; pb++; COUNT++; } if(*pa != *pb) { printf("%d", COUNT); } if(*pa == '\0') { printf("-1"); } return 0; }
这段代码试图比较两个字符串,并输出它们从开头开始相同字符的个数。如果其中一个字符串是另一个的前缀,则输出-1。

代码的主要逻辑是:用两个指针分别指向两个字符串的开头,然后逐个字符比较,直到遇到不相同的字符或某个字符串结束。计数器COUNT记录相同字符的数量。最后根据比较结果输出COUNT或-1。

- 注意输入格式:`scanf("%[^\n]  %[^\n]", a, b)` 中两个格式说明符之间有两个空格,这会导致输入时需要在两个字符串之间输入两个空格,而不是一个换行或一个空格。这可能是输入方式不符合预期的地方。

- 当第一个字符串结束时(即`*pa == '\0'`),代码输出-1。但题目要求可能是当其中一个字符串是另一个的前缀时输出-1,而这里只检查了`*pa`是否结束,没有检查`*pb`是否结束。如果`*pa`没结束但`*pb`结束了,也会进入`*pa != *pb`的分支输出COUNT,但此时实际上也是前缀情况。