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

来源:互联网 发布:h5 微信订餐系统源码 编辑:程序博客网 时间:2024/06/08 14:01
/*  copyright (t) 2016,烟台大学计算机学院  *All rights reserved.  *文件名称:1.cpp  *作者:臧新晓 *完成日期:2016年10月30日  *版本号:v1.0  *问题描述:采用顺序结构存储串,编写一个算法计算指定子串在一个字符串中出现的次数,如果该子串不出现则为0。  *输入描述:字符串(设为多组输入)  *程序输出:指定子串在一个字符串中出现的次数  */  

#include <stdio.h>  #define MaxSize 100  typedef struct                  //定义顺序串类型  {      char data[MaxSize];         //存放字符      int length;                 //记录串长度  } SqString;  void StrAssign(SqString &s,char cstr[]);                //字符串常量cstr赋给串s  void StrCopy(SqString &s,SqString t);                   //串t复制给串s  bool 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);                               //输出串  #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;  }  #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;  }  


知识点总结:

        串的模式匹配

心得体会:


0 0
原创粉丝点击