字符串的基本操作
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]!='\0'){ 11 L.ch[i]=ch1[i]; 12 i++; 13 } 14 L.n=i; 15 } 16 17 void DisqStr(SeqString &L){ // 输出串 18 printf("输出的的字符串为:"); 19 for(int i=0;i<L.n;i++){ 20 printf("%c",L.ch[i]); 21 } 22 printf("\n"); 23 } 24 25 void Strlength(SeqString &L){ //求串长 26 printf("字符串L.ch的长度为:%d\n",L.n); 27 } 28 29 int concat(SeqString &L,char ch2[]){ //串连接 30 int i=0,j; 31 while(ch2[i]!='\0'){ 32 i++; 33 } 34 for(j=0;j<i;j++){ 35 L.ch[j+L.n]=ch2[j]; 36 } 37 printf("将串ch2连接到L.ch后面,得到的新的字符串为:\n%s\n",L.ch); 38 return i; 39 } 40 41 void StrEqual(SeqString &L,char ch2[],int i){ //判断串相等 42 int k=0,a; 43 a=L.n>=i?L.n:i; 44 printf("判断L.ch和ch2的字符串是否相等!(L.ch>ch2->1,L.ch=ch2->0,L.ch<ch2->-1)\n结果为:"); 45 for(int j=0;j<a;j++){ 46 if(L.ch[j]==ch2[j]){ 47 printf("0\n"); 48 break; 49 }else if(L.ch[j]>ch2[j]){ 50 printf("1\n"); 51 break; 52 }else { 53 printf("-1\n"); 54 break; 55 } 56 } 57 } 58 59 void InsStr(SeqString &L,int n,int m){ //串的插入 60 int i; 61 printf("L.ch字符串第%d个位置开始的%d个字符为:\n",n,m); 62 for(i=n-1;i<n+m-1;i++){ 63 printf("%c",L.ch[i]); 64 } 65 printf("\n"); 66 } 67 68 void DelStr(SeqString &L,int n,int m){ //删除串 69 int i; 70 L.n=L.n-m; 71 for(i=n;i<=L.n;i++){ 72 L.ch[i-1]=L.ch[i+m-1]; 73 } 74 printf("删除第%d个位置的%d个字符之后组成新的字符串为:\n",n,m); 75 for(i=0;i<L.n;i++){ 76 printf("%c",L.ch[i]); 77 } 78 } 79 80 void InStr(SeqString &L,int n,int m,char ch2[]){ //插入串 81 int a[L.n-n+1]; 82 for(int i=0;i<L.n-n+1;i++){ 83 a[i]=L.ch[i+n-1]; 84 } 85 for(int i=0;i<m;i++){ 86 L.ch[i+n-1]=ch2[i]; 87 } 88 for(int i=0;i<L.n-n+1;i++){ 89 L.ch[n+m-1+i]=a[i]; 90 } 91 L.n=L.n+m; 92 printf("将ch2插在L.ch的第%d个位置之后构成的字符串为:\n",n); 93 for(int i=0;i<L.n;i++){ 94 printf("%c",L.ch[i]); 95 } 96 printf("\n"); 97 } 98 99 void Find (SeqString &L,char ch3[]){ 100 int n=0,i,j,k; 101 while(ch3[n]!='\0'){ 102 n++ ; 103 } 104 for(i=0;i<L.n-n;i++){ 105 for(j=0,k=i;j<n;j++,k++){ 106 if(ch3[j]!=L.ch[k]){ 107 break; 108 } } 109 if(j==n){ 110 printf("ch3字符串是从L.ch字符串中的第%d位置到第%d的位置\n",i+1,i+n); 111 } 112 } 113 return; 114 } 115 116 int main(){ 117 int i,n,m,a,b,k; 118 char ch1[100],ch2[100],ch3[4]="efg"; 119 SeqString L; 120 printf("请输入一个字符串:\n"); 121 gets(ch1); 122 Assign(L,ch1); 123 DisqStr(L); 124 Strlength(L); 125 printf("请输入一个字符串ch2:\n"); 126 gets(ch2); 127 i=concat(L,ch2); 128 StrEqual(L,ch2,i); 129 printf("请问要查找第几个位置开始的几个字符:\n"); 130 scanf("%d %d",&n,&m); 131 InsStr(L,n,m); 132 printf("请问要在%s第几个位置插入字符串ch2:\n",ch1); 133 scanf("%d",&k); 134 InStr(L,k,i,ch2); 135 printf("查找字符串ch3在L.ch字符串中的位置:\n"); 136 Find(L,ch3); 137 printf("请问要删除第几个位置开始的几个字符:\n"); 138 scanf("%d %d",&a,&b); 139 DelStr(L,a,b); 140 return 0; 141 }