Online Compiler C

#include <stdio.h> int main() { char a[1001], b[1001]; scanf("%[^\n]", a); scanf("%[^\n]", b); long long int p1 = 0,p2 = 0; while(a[p1] != '\0' ) { p1++; } while(b[p2] != '\0' ) { p2++; } long long int count = 0, count1 = 0; for(int i = 0; i < p1 - p2 +1; i++) { int k = 0; count1 = 0; for(int j = i; j < i + p2;j++) { if(a[j] == b[k]) { count1++; } k++; if(count1 == p2) { count++; } } } printf("%lld", count); return 0; }
这段代码试图统计字符串b在字符串a中出现的次数,但存在逻辑错误。代码先读取两行字符串,然后计算它们的长度,最后用嵌套循环尝试匹配。

- 内层循环中,每次比较字符相等时count1递增,但count1在每次内层循环开始时重置为0。然而,判断count1 == p2的语句放在了内层循环内部,这意味着只要某次比较后count1等于p2就会立即计数,但此时内层循环可能还没结束,导致重复计数或错误计数。正确的做法应该是在内层循环结束后再判断是否完全匹配。

- 另外,当p1 < p2时,外层循环条件i < p1 - p2 + 1会变成负数,导致循环不执行,但这种情况应该输出0,目前代码不会输出任何结果。需要处理这种边界情况。