Онлайн компилятор C

#include <stdio.h> int length(char s[]) { int i = 0; while (s[i] != '\0') { i++; } return i; } int counter(char a[], char b[]) { int size_a = length(a); int size_b = length(b); int counter = 0; if (size_a >= size_b) { for (int i = 0; i < size_a - size_b + 1; i++) { int sum = 0; for (int j = 0; j < size_b; j++) { if (a[i + j] == b[j]) { sum++; } } if (sum == size_b) { counter++; } } } return counter; } int main() { char a[1001]; char b[101]; scanf("%s", a); scanf("%s", b); printf("%d", counter(a, b)); return 0; }
这段代码的功能是:从标准输入读取两个字符串,然后统计字符串b在字符串a中作为连续子串出现的次数,并输出这个次数。

代码中定义了两个函数:length用于计算字符串长度,counter用于统计子串出现次数。在counter函数中,外层循环遍历a中所有可能的起始位置,内层循环检查从该位置开始的连续字符是否与b完全匹配,如果完全匹配则计数器加1。

- 注意counter函数中变量名与函数名重复,虽然语法上允许,但容易造成混淆,建议将计数变量改为其他名称如count。
- 检查边界条件:当size_a小于size_b时,函数直接返回0,这是正确的。但需要确认当size_a等于size_b时,循环条件i < size_a - size_b + 1是否正常工作,例如当两个字符串长度相等时,循环只执行一次,这是符合预期的。