字符串的基本操作
// // main.cpp // 字符串 // // Created by 孙贤超 on 2019/5/18. // Copyright © 2019 孙贤超. All rights reserved. // #include<stdio.h> #define maxsize 100 typedef struct{ char ch[maxsize]; int n; }SeqString; void Assign(SeqString &L,char ch1[]); void DisqStr(SeqString &L); void Strlength(SeqString &L); int concat(SeqString &L,char ch2[]); void StrEqual(SeqString &L,char ch2[],int i); void InsStr(SeqString &L,int n,int m); void DelStr(SeqString &L,int n,int m); void InStr(SeqString &L,int n,int m,char ch2[]); void Find (SeqString &L,char ch3[]); int main(){ int i,n,m,a,b,k; char ch1[100],ch2[100],ch3[4]="efg"; SeqString L; printf("请输入一个字符串:\n"); gets(ch1); Assign(L,ch1); DisqStr(L); Strlength(L); printf("请输入一个字符串ch2:\n"); gets(ch2); i=concat(L,ch2); StrEqual(L,ch2,i); printf("请问要查找第几个位置开始的几个字符:\n"); scanf("%d %d",&n,&m); InsStr(L,n,m); printf("请问要在%s第几个位置插入字符串ch2:\n",ch1); scanf("%d",&k); InStr(L,k,i,ch2); printf("查找字符串ch3在L.ch字符串中的位置:\n"); Find(L,ch3); printf("请问要删除第几个位置开始的几个字符:\n"); scanf("%d %d",&a,&b); DelStr(L,a,b); return 0; } void Assign(SeqString &L,char ch1[]){ // 数组赋值给字符串 int i=0; while(ch1[i]!='\0'){ L.ch[i]=ch1[i]; i++; } L.n=i; } void DisqStr(SeqString &L){ // 输出串 printf("L.ch的字符串为:"); for(int i=0;i<L.n;i++){ printf("%c",L.ch[i]); } printf("\n"); } void Strlength(SeqString &L){ //求串长 printf("字符串L.ch的长度为:%d\n",L.n); } int concat(SeqString &L,char ch2[]){ //串连接 int i=0,j; while(ch2[i]!='\0'){ i++; } for(j=0;j<i;j++){ L.ch[j+L.n]=ch2[j]; } printf("将串ch2连接到L.ch后面,得到的新的字符串为:\n%s\n",L.ch); return i; } void StrEqual(SeqString &L,char ch2[],int i){ //判断串相等 int k=0,a; a=L.n>=i?L.n:i; printf("判断L.ch和ch2的字符串是否相等!(L.ch>ch2->1,L.ch=ch2->0,L.ch<ch2->-1)\n结果为:"); for(int j=0;j<a;j++){ if(L.ch[j]==ch2[j]){ k++; }else if(L.ch[j]>ch2[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.ch字符串第%d个位置开始的%d个字符为:\n",n,m); for(i=n-1;i<n+m-1;i++){ printf("%c",L.ch[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.ch[i-1]=L.ch[i+m-1]; } printf("删除第%d个位置的%d个字符之后组成新的字符串为:\n",n,m); for(i=0;i<L.n;i++){ printf("%c",L.ch[i]); } } void InStr(SeqString &L,int n,int m,char ch2[]){ //插入串 int a[L.n-n+1]; for(int i=0;i<L.n-n+1;i++){ a[i]=L.ch[i+n-1]; } for(int i=0;i<m;i++){ L.ch[i+n-1]=ch2[i]; } for(int i=0;i<L.n-n+1;i++){ L.ch[n+m-1+i]=a[i]; } L.n=L.n+m; printf("将ch2插在L.ch的第%d个位置之后构成的字符串为:\n",n); for(int i=0;i<L.n;i++){ printf("%c",L.ch[i]); } printf("\n"); } void Find (SeqString &L,char ch3[]){ int n=0,i,j,k; while(ch3[n]!='\0'){ n++ ; } for(i=0;i<L.n-n;i++){ for(j=0,k=i;j<n;j++,k++){ if(ch3[j]!=L.ch[k]){ break; } } if(j==n){ printf("ch3字符串是从L.ch字符串中的第%d位置到第%d的位置\n",i+1,i+n); } } return; }