查找字符串中子字符串出现次数

来源:互联网 发布:中走丝hf上下异形编程 编辑:程序博客网 时间:2024/05/24 05:49
   在学linux c过程中,遇到一个问题,就是查找一个长的的字符串中子字符串出现的次数。例如查找adbcabcabc中 abc 出现的次数。 自己写的时候遇到   了一些小问题,折腾了一下午写出来的程序都有瑕疵,在网上上找这个程序代码,没有发现一个正确的程序,都是有瑕疵的(可能大神们没时间解决这   样一个不起眼的程序吧)。    终于写出这个程序,很完美的解决了一些小bug,甚至可以测试一些很变态的例子,例如在 ababababba中查找 aba 出现的次数,在aaaaaaaa中查找aa出现的次数。   话不多说,上程序:
/*****************************************************     File name:3.c Author: Tang Zhiqian  Date:2017-07-27 15:42*****************************************************/#include <stdio.h>#include <string.h>int  func(char *str_f, char *str_z);int main(){    char str_f[50];    char str_z[10];    scanf("%s",str_f);    scanf("%s",str_z);    printf("%d\n", func(str_f,str_z));    return 0;}int func(char *str_f, char *str_z){    int n = 0;    int same_num;    //判断父字符串中与子字符串“连续”相同的个数    int len_f = strlen(str_f); //测长度    int len_z = strlen(str_z);    int i,j;    for(i = 0; i < len_f; i++) //父字符串逐个往后推    {        same_num = 0;        for(j = 0; j < len_z; j++)   //确定父字符串的字符后,子字符串从开头逐个往后推        {            if(str_f[i + j] == str_z[j])            {                same_num ++;     //相同+1            }            if(same_num == len_z)   //子字符串循环完后判断与父字符串相同的个数是否等于子字符串的个数            {                n++;            }        }    }    return n;}

好的!
来运行一下:
1. 先测试ababa中aba出现的次数(很明显2次);
果然是2次
果然是 2 次;

2.测试aaaaa中aa出现次数(很明显4次)
这里写图片描述
果然 4 次;

3.再来个普通的
这里写图片描述

完美!简直完美啊!

原创粉丝点击