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

来源:互联网 发布:python 字节串 编辑:程序博客网 时间:2024/04/29 16:28

问题及描述:

sqString.h

#define MaxSize 100             //最多的字符个数  typedef struct  {   char data[MaxSize];         //定义可容纳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);   //输出串 

sqString.cpp

#include "sqString.h"  #include<stdio.h>  void StrAssign(SqString &s,char cstr[])  {      int i;      for(i=0; cstr[i]!='\0'; i++)          s.data[i]=cstr[i];      s.length=i;  }  //′?->′?  void StrCopy(SqString &s,SqString t)  {      int i;      for(i=0; i<s.length; i++)          s.data[i]=t.data[i];      s.length=t.length;  }  bool StrEqual(SqString s,SqString t)  {      int i;      if(s.length!=t.length)          return false;      else          for(i=0; i<s.length; i++)          {              if(s.data[i]!=t.data[i])                  return false;          }      return true;  }  int StrLength(SqString s)  {      return s.length;  }  //串的连接  SqString Concat(SqString s,SqString t)  {      SqString str;      str.length=0;      int i;      for(i=0; i<s.length; i++)          str.data[i]=s.data[i];      for(i=0; i<t.length; i++)          str.data[s.length+i]=t.data[i];      str.length=s.length+t.length;      return str;  }  //求子串  SqString SubStr(SqString s,int i,int j)  {      SqString str;      str.length=0;      if(i<=0||i>s.length||j<0||i+j-1>s.length)          return str;      for(int m=0; m<j; m++)      {          str.data[m]=s.data[i-1];          i++;      }      str.length=j;      return str;  }  //串的插入  SqString InsStr(SqString s1,int i,SqString s2)  {      SqString str;      str.length=0;      int j;      if(i<=0||i>s1.length+1)          return str;      for(j=0; j<i-1; j++)          str.data[j]=s1.data[j];      for(j=0; j<s2.length; j++)          str.data[i+j-1]=s2.data[j];      for(j=i-1; j<s1.length; j++)          str.data[j+s2.length]=s1.data[j];      str.length=s1.length+s2.length;      return str;  }  //删除子串  SqString DelStr(SqString s,int i,int j)  {      int m;      SqString str;      if(i<=0||i>s.length||j<0||i+j-1>s.length)          return str;      for(m=0; m<i-1; m++)          str.data[m]=s.data[m];      for(m=0; m<s.length-j-1; m++)          str.data[i-1+m]=s.data[i+j-1+m];      str.length=s.length-j;      return str;  }  //串的替换  SqString RepStr(SqString s,int i,int j,SqString t)  {      int m;      SqString str;      str.length=0;      if(i<=0||i>s.length||i+j-1>s.length)          return str;      for(m=0; m<i+j-1; m++)          str.data[m]=s.data[m];      for(m=0; m<t.length; m++)          str.data[i-1+m]=t.data[m];      for(m=i+j-1; m<s.length; m++)          str.data[m-j+t.length]=s.data[m];      str.length=s.length+t.length-j;      return str;    }  void DispStr(SqString s)  {      int i;      if(s.length>0)      {          for(i=0; i<s.length; i++)              printf("%c",s.data[i]);          printf("\n");      }  }  int str_count(SqString s,SqString t)    {      int i=0,j=0,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;  } 

mian.cpp

#include "sqString.h"  #include "stdio.h"  int str_count(SqString s,SqString t) ;int main()  {      SqString s,t;      StrAssign(s,"accaccacacabcacbab");      StrAssign(t,"accac");      printf("s:");      DispStr(s);      printf("t:");      DispStr(t);      printf("%d\n",str_count(s,t));      return 0;  }  


运行结果



0 0