第八周项目5 计数的模式分配

来源:互联网 发布:tp-link产品工程师知乎 编辑:程序博客网 时间:2024/06/05 00:30

问题及代码:

/*copyright (t) 2016,烟台大学计算机学院*All rights reserved.*文件名称:fangzhou.cpp*作者:吕方舟
*完成日期:2016年11月3日*版本号:v1.0*问题描述:采用顺序结构存储串,编写一个算法计算指定子串在一个字符串中出现的次数,如果该子串不出现则为0。*输入描述:字符串(设为多组输入)*程序输出:指定子串在一个字符串中出现的次数*/

 

sqstring.h: #include <stdio.h>#define MaxSize 100typedef struct                  //定义顺序串类型{    char data[MaxSize];         //存放字符    int length;                 //记录串长度} SqString;void StrAssign(SqString &s,char cstr[]);                //字符串常量cstr赋给串svoid StrCopy(SqString &s,SqString t);                   //串t复制给串sbool StrEqual(SqString s,SqString t);                   //判串相等int StrLength(SqString s);                              //求串长SqString Concat(SqString s,SqString t);                 //串连接SqString SubStr(SqString s,int i,int j);                //求子串SqString InsStr(SqString s1,int i,SqString s2);         //串插入SqString DelStr(SqString s,int i,int j) ;               //串删去SqString RepStr(SqString s,int i,int j,SqString t);     //串替换void DispStr(SqString s);                               //输出串sqstring.cpp: #include <stdio.h>#include "sqstring.h"int index(SqString s,SqString t){    int i=0,j=0;    int count=0;    while(i<s.length && j<t.length)    {        if(s.data[i]==t.data[j])            i++,j++;        else        {            i=i-j+1;            j=0;        }        if(j>=t.length)                         //完成一次匹配后,次数+1        {            count++;            i=i-j+1;                            //主串从下一位置开始匹配,子串从头开始匹配            j=0;        }    }    return count;}int main(){    SqString s1,s2;                             //s1为主串,s2为模式串    char a[1000],b[1000];    while(gets(a))    {        gets(b);        StrAssign(s1,a);        StrAssign(s2,b);        printf("%d\n\n",index(s1,s2));    }    return 0;}main.cpp: #include <stdio.h>#include "sqstring.h"int index(SqString s,SqString t){    int i=0,j=0;    int count=0;    while(i<s.length && j<t.length)    {        if(s.data[i]==t.data[j])            i++,j++;        else        {            i=i-j+1;            j=0;        }        if(j>=t.length)        {            count++;            i=i-j+1;            j=0;        }    }    return count;}int main(){    SqString s1,s2;                             //s1为主串,s2为模式串    char a[1000],b[1000];    while(gets(a))    {        gets(b);        StrAssign(s1,a);        StrAssign(s2,b);        printf("%d\n\n",index(s1,s2));    }    return 0;}


运行结果:

知识点总结:串的模式匹配。

心得体会:通过此题加深了对BF算法和KMP算法的理解与应用。

0 0
原创粉丝点击