数据结构字符串实训报告

① 串赋值Assign(s,t):将一个值赋给串s。
② 销毁串DestroyStr(s):释放串s占用的内存空间。
③ 串复制StrCopy(s,t):将一个串t赋给串s。
④ 求串长StrLength(s):返回串s的长度。
⑤ 判断串相等StrEqual(s,t):两个串s和t相等时返回1;否则返回0。
⑥ 串连接Concat(s,t):返回串s和串t连接的结果。
⑦ 求子串SubStr (s,i,j):返回串s的第i个位置开始的j个字符组成的串。
⑧ 查找定位位置Index(s,t):返回子串t在主串s中的位置。
⑨ 子串插入InsStr(s,i,t):将子串t插入到串s的第i个位置。
⑩ 子串删除DelStr(s,i,j):删除串s中从第i个位置开始的j个字符。
⑪ 子串替换RepStrAll(s,s1,s2):将串s中所有出现的子串s1均替换成s2。
⑫ 输出串DispStr(s):显示串s的所有字符。
  1 #include<stdio.h>
  2 #define maxsize 100
  3 typedef struct{
  4     char ch[maxsize];
  5     int n;
  6 }SeqString;
  7 
  8 void Assign(SeqString &L,char ch1[]){           //  数组赋值给字符串
  9     int i=0;
 10     while(ch1[i]!=''){
 11         L.ch[i]=ch1[i];
 12         i++;
 13     }
 14     L.n=i;
 15 }
 16 
 17 void DisqStr(SeqString &L){                     //  输出串
 18     printf("L.ch的字符串为:");
 19     for(int i=0;i<L.n;i++){
 20         printf("%c",L.ch[i]);
 21     }
 22     printf("
");
 23 }
 24 
 25 int  concat(SeqString &L,char ch2[]){            //串连接
 26     int i=0,j,m;
 27     m=L.n;
 28     while(ch2[i]!=''){
 29         i++;
 30         m++;
 31     }
 32     for(j=0;j<i;j++){
 33         L.ch[j+L.n]=ch2[j];
 34     }
 35     printf("将串ch2连接到L.ch后面,得到的新的字符串为:
%s
",L.ch);
 36     L.n=m;
 37     return i;
 38 }
 39 
 40 void Strlength(SeqString &L){                    //求串长
 41     printf("字符串L.ch的长度为:%d
",L.n);
 42 }
 43 
 44 void StrEqual(SeqString &L,char ch2[],int i){          //判断串相等
 45     int k=0,a;
 46     a=L.n>=i?L.n:i;
 47     printf("判断L.ch和ch2的字符串是否相等!
结果为:");
 48     for(int j=0;j<a;j++){
 49         if(L.ch[j]==ch2[j]){
 50             k++;
 51         }else if(L.ch[j]>ch2[j]){
 52             printf("1
");
 53             break;
 54         }else {
 55             printf("-1
");
 56             break;
 57         }
 58     }
 59     if(k==a){
 60         printf("0
");
 61     }
 62 }
 63 
 64 void Index (SeqString &L,char ch3[]){
 65     int n=0,i,j,k;
 66     while(ch3[n]!=''){
 67         n++ ;
 68     }
 69     for(i=0;i<L.n-n;i++){
 70         for(j=0,k=i;j<n;j++,k++){
 71             if(ch3[j]!=L.ch[k]){
 72                 break;
 73             } }
 74         if(j==n){
 75             printf("ch3字符串是从L.ch字符串中的第%d位置到第%d的位置
",i+1,i+n);
 76         }
 77     }
 78     return;
 79 }
 80 
 81 void InsStr(SeqString &L,int n,int m){           //串的查找
 82     int i;
 83     printf("L.ch字符串第%d个位置开始的%d个字符为:
",n,m);
 84     for(i=n-1;i<n+m-1;i++){
 85         printf("%c",L.ch[i]);
 86     }
 87     printf("
");
 88 }
 89 
 90 int main(){
 91     int i,m,n;
 92     char ch1[100],ch2[5]="efgh",ch3[4]="efg";
 93     SeqString L;
 94     printf("请输入一个字符串:
");
 95     gets(ch1);
 96     Assign(L,ch1);
 97     DisqStr(L);
 98     Strlength(L);
 99     StrEqual(L,ch2,i);
100     i=concat(L,ch2);
101     printf("请问要查找第几个位置开始的几个字符:
");
102     scanf("%d %d",&n,&m);
103     InsStr(L,n,m);
104     Index(L,ch3);
105     DisqStr(L);
106 }
原文地址:https://www.cnblogs.com/liuxun1031/p/10891509.html