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; }
这段代码的功能是:先用 `fgets` 读入两行字符串(分别存入数组 `a` 和 `b`),然后计算两个字符串的长度,最后在字符串 `a` 中查找字符串 `b` 出现的次数(完全匹配)。

代码中有一个关键问题:`fgets` 会读取换行符 `\n` 并存入字符串中,因此你计算的长度 `p1` 和 `p2` 实际上包含了末尾的换行符。这会导致后续的匹配逻辑把换行符也当作字符进行比较,从而可能得到错误的结果。

- 提示1:检查 `fgets` 读入后字符串末尾是否包含换行符,思考这个换行符对长度计算和匹配逻辑的影响。
- 提示2:在计算长度或进行匹配之前,可以考虑是否需要去除字符串末尾的换行符。