第八周【项目一-建立顺序的算法库】

来源:互联网 发布:阿里云oss 图片 文件夹 编辑:程序博客网 时间:2024/06/16 17:37

问题描述及代码:

/*    *烟台大学计控学院     *作    者:边朔    *完成日期:2016年10月15日 *问题描述:定义顺序串的存储结构,实现其基本运算,并完成测试。    要求:    1、头文件sqString.h中定义数据结构并声明用于完成基本运算的函数。对应基本运算的函数包括:  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);   //输出串1 2、在sqString.cpp中实现这些函数  3、在main函数中完成测试,包括如下内容:  (1)建立串s:abcdefghijklmn和串s1:123  (2)输出串s和s1  (3)输出串s的长度  (4)在串s的第9个字符位置插入串s1而产生串s2  (5)输出串s2  (6)删除串s第2个字符开始的5个字符而产生串s2  (7)输出串s2  (8)将串s第2个字符开始的5个字符替换成串s1而产生串s2  (9)输出串s2  (10)提取串s的第2个字符开始的10个字符而产生串s3  (11)输出串s3  (12)将串s1和串s2连接起来而产生串s4  (13)输出串s4   */  


(1)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);   //输出串  


(2)sqString.cpp


#include"sqString.h"  #include<stdio.h>  #include<malloc.h>  void StrAssign(SqString &s,char cstr[])   //字符串常量cstr赋给串s  {      int i;      for(i=0;cstr[i]!='\0';i++)          s.data[i]=cstr[i];      s.length=i;  }  void StrCopy(SqString &s,SqString t)   //串t复制给串s  {      int i;      for(i=0;i<t.length;i++)          s.data[i]=t.data[i];      s.length=t.length;    }  bool StrEqual(SqString s,SqString t) //判串相等  {      bool same=true;      int i;      if(s.length!=t.length)          same=false;      else          for(i=0;i<s.length;i++)          if(s.data[i]!=t.data[i])              {                  same=false;          break;              }              return same;  }  int StrLength(SqString s)  //求串长  {      return s.length;  }  SqString Concat(SqString s,SqString t) //串连接  {      SqString str;      int i;      str.length=s.length+t.length;      for(i=0;i<s.length;i++)          str.data[s.length+i]=t.data[i];      return str;  }  SqString SubStr(SqString s,int i,int j) //求子串  {      SqString str;      int k;      str.length=0;      if(i<=0||i>s.length||j<0||i+j-1>s.length)          return str;      for(k=i-1;k<i+j-1;k++)          str.data[k-i+1]=s.data[k];      str.length=j;      return str;  }  SqString InsStr(SqString s1,int i,SqString s2) //串插入  {      int j;      SqString str;      str.length=0;      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[s2.length+j]=s1.data[j];      str.length=s1.length+s2.length;      return str;  }  SqString DelStr(SqString s,int i,int j)    //串删去  {      int k;      SqString str;      str.length=0;      if(i<=0||i>s.length||i+j>s.length+1)          return str;      for(k=0;k<i-1;k++)          str.data[k]=s.data[k];      for(k=i+j-1;k<s.length;k++)          str.data[k-j]=s.data[k];      str.length=s.length-j;      return str;  }  SqString RepStr(SqString s,int i,int j,SqString t)     //串替换  {   int k;      SqString str;      str.length=0;      if(i<=0||i>s.length||i+j>s.length)          return str;          for(k=0;k<i-1;k++)              str.data[k]=s.data[k];          for(k=i+j-1;k<s.length;k++)              str.data[t.length+k-j]=s.data[k];          str.length=s.length-j+t.length;          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");      }  }  


(3)main.cpp


#include "sqString.h"  #include<stdio.h>  int main()  {      SqString s,s1,s2,s3,s4;      printf("链串的基本运算如下:\n");      printf("  (1)建立串s和串s1\n");      StrAssign(s,"abcdefghijklmn");      printf("  (2)输出串s:");      DispStr(s);      StrAssign(s1,"123");      printf("  (2)输出串s1:");      DispStr(s1);      printf("  (3)串s的长度:%d\n",StrLength(s));      printf("  (4)在串s的第9个字符位置插入串s1而产生串s2\n");      s2=InsStr(s,9,s1);      printf("  (5)输出串s2:");      DispStr(s2);      printf("  (6)删除串s第2个字符开始的5个字符而产生串s2\n");      s2=DelStr(s,2,3);      printf("  (7)输出串s2:");      DispStr(s2);      printf("  (8)将串s第2个字符开始的5个字符替换成串s1而产生串s2\n");      s2=RepStr(s,2,5,s1);      printf("  (9)输出串s2:");      DispStr(s2);      printf("  (10)提取串s的第2个字符开始的10个字符而产生串s3\n");      s3=SubStr(s,2,10);      printf("  (11)输出串s3:");      DispStr(s3);      printf("  (12)将串s1和串s2连接起来而产生串s4\n");      s4=Concat(s1,s2);      printf("  (13)输出串s4:");      DispStr(s4);      return 0;  }  

运行结果:





知识点总结:

串的基本运算。

学习心得:

看视频的时候都理解了,但当过了这几天之后再来看算法又出现了不理解,通过实践敲代码让自己对这些知识点又读了一遍,感觉比只看视频收获多了很多。









0 0
原创粉丝点击