#include <stdio.h> #include <string.h> int main() { int substr(char*, char*); char str[100], sub[100]; gets(str); // 输入字符串 gets(sub); // 输入子字符串 int num = substr(str, sub); // 调用函数计算出现次数 printf("%d", num); return 0; } int substr(char *str, char *substr) { // 计算子字符串出现次数 int count = 0; while (*str != '') {// 当读取到字符串末尾时退出循环 char *p1 = str, *p2 = substr; // 定义指针指向字符串首地址 while (*p2 != '' && *p1 == *p2) { // 当子字符串指针p2没有移动到末尾时,与原字符串指针取的值相等, // 即表示子字符串有字符和原字符串相等, 指针依次后移继续判断下一位是否相等 p1++; p2++; } if (*p2 == '') // 若子字符串指针移动到了末尾,即说明上一步完整循环了子字符串,子字符串在原字符串中出现了一次 count++; str++; // 原字符串后移,从下一位继续判断子字符串是否出现 } return count; }如何看懂该程序
时间: 2023-06-25 10:02:39 浏览: 108
如何在C语言中巧用正则表达式(linux).docx
这是一个 C 语言程序,主要实现的功能是计算一个字符串中另一个子字符串出现的次数。
程序分为两个部分:
1. main 函数:获取用户输入的字符串和子字符串,并调用 substr 函数计算出现次数,最终输出结果。
2. substr 函数:该函数接收两个参数,分别为指向原字符串和子字符串的指针。函数内部使用两个指针 p1 和 p2 分别指向原字符串和子字符串的首地址,然后逐个比较两个指针所指向的字符是否相等,如果相等则两个指针都后移,否则只有原字符串的指针后移。当子字符串的指针移动到了末尾时,说明子字符串已经完整地匹配了一次原字符串,于是计数器加一,原字符串的指针也向后移动一个字符,继续匹配下一次。当原字符串的指针移动到了末尾时,说明整个字符串已经匹配完成,函数返回计数器的值即可。
需要注意的是,该程序使用了 gets 函数读取用户的输入,这个函数在最新的 C 语言标准中已经被废弃,因为它可能导致缓冲区溢出等安全问题。建议使用 fgets 函数代替 gets 函数。
阅读全文