Online Compiler C

#include <stdio.h> int main() { char a[1001] = "aaa\n"; char b[101] = "aa\n"; fgets(a, 1001, stdin); //"aaa\n" fgets(b, 101, stdin); //"aa\n" long long int p1 = 0,p2 = 0; while(a[p1] != '\0' ) { p1++; } while(b[p2] != '\0' ) { p2++; } //printf("%lld %lld\n", p1,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中出现的次数,但存在几个问题。

代码首先用fgets读取两行字符串,然后计算它们的长度。接着用嵌套循环遍历a,每次取与b等长的子串,逐字符比较是否相等,如果完全匹配则计数加一。

- 注意fgets会读取换行符'\n'并存入字符串中,所以a和b末尾都包含换行符。这会导致比较时把换行符也算作字符,可能影响匹配结果。你需要考虑是否应该去掉换行符,或者调整比较逻辑。
- 外层循环的条件是i < p1 - p2 + 1,但p1和p2包含换行符,所以循环范围可能不正确。另外,内层循环中j的范围是i到i+p2,但p2包含换行符,所以比较的字符数可能比预期多一个。