在线编译器 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; 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中出现的次数(包括重叠的情况)。代码先读取两行字符串,然后计算它们的长度,最后用嵌套循环进行匹配。

代码中存在几个问题:

- 在第一个scanf中,格式字符串末尾多了一个空格,这会导致读取行为异常,可能跳过输入或读取到空字符串。

- 变量count1在每次外层循环开始时没有被重置为0,导致匹配计数会不断累积,无法正确判断每次子串是否完全匹配。

- 判断完全匹配的条件应该在外层循环的每次迭代中独立检查,而不是在内层循环中每次字符相等时都检查。