数据结构5月14日上机(字符串的基本操作)
#include<stdio.h> #define maxsize 100 typedef struct{ char A[maxsize]; int n; }SeqString; void Assign(SeqString &L,char B[]){ int i=0; while(B[i]!='\0'){ L.A[i]=B[i]; i++; } L.n=i; } void DisqStr(SeqString &L){ printf("L.B字符串为:"); for(int i=0;i<L.n;i++){ printf("%c",L.A[i]); } printf("\n"); } void Strlength(SeqString &L){ printf("字符串L.A的长度为:%d\n",L.n); } int concat(SeqString &L,char C[]){ int i=0,j; while(C[i]!='\0'){ i++; } for(j=0;j<i;j++){ L.A[j+L.n]=C[j]; } printf("将串C连接到L.A后得到的字符串为:%s\n",L.A); return i; } void StrEqual(SeqString &L,char C[],int i){ int k=0,a; a=L.n>=i?L.n:i; printf("比较L.A和B的字符串大小!(L.A等于C输出0,L.A大于C输出1,L.A小于C输出-1)\n"); for(int j=0;j<a;j++){ if(L.A[j]==C[j]){ k++; }else if(L.A[j]>C[j]){ printf("1\n"); break; }else { printf("-1\n"); break; } } if(k==a){ printf("0\n"); } } void InsStr(SeqString &L,int n,int m){ int i; printf("L.A字符串第%d个位置开始的第%d个字符为:",n,m); for(i=n-1;i<n+m-1;i++){ printf("%c",L.A[i]); } printf("\n"); } void DelStr(SeqString &L,int n,int m){ int i; L.n=L.n-m; for(i=n;i<=L.n;i++){ L.A[i-1]=L.A[i+m-1]; } printf("删除第%d个位置的%d个字符之后组成新的字符串为:",n,m); for(i=0;i<L.n;i++){ printf("%c",L.A[i]); } } void InStr(SeqString &L,int n,int m,char C[]){ int a[L.n-n+1]; for(int i=0;i<L.n-n+1;i++){ a[i]=L.A[i+n-1]; } for(int i=0;i<m;i++){ L.A[i+n-1]=C[i]; } for(int i=0;i<L.n-n+1;i++){ L.A[n+m-1+i]=a[i]; } L.n=L.n+m; printf("将C插在L.A的第%d个位置构成的字符串为:",n); for(int i=0;i<L.n;i++){ printf("%c",L.A[i]); } printf("\n"); } void Find (SeqString &L,char D[]){ int n=0,i,j,k; while(D[n]!='\0'){ n++ ; } for(i=0;i<L.n-n;i++){ for(j=0,k=i;j<n;j++,k++){ if(D[j]!=L.A[k]){ break; } } if(j==n){ printf("D是L.A字符串中从第%d位置到第%d的位置的字符串:\n",i+1,i+n); } } return; } int main(){ int i,n,m,a,b,k; char B[5],C[]="abcdefg",D[4]="cde"; SeqString L; printf("请输入一个最大长度为5的字符串:"); gets(B); Assign(L,B); DisqStr(L); Strlength(L); i=concat(L,C); StrEqual(L,C,i); printf("请输入要查找从第几个位置开始到后面的第几个字符:"); scanf("%d %d",&n,&m); InsStr(L,n,m); printf("请输入在第几个位置插入字符串C:"); scanf("%d",&k); InStr(L,k,i,C); printf("请查找字符串D在L.A字符串中的位置:\n"); Find(L,D); printf("请输入要删除第几个位置开始的几个字符:"); scanf("%d %d",&a,&b); DelStr(L,a,b); return 0; }