字符串的基本操作

  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("输出的的字符串为:");
 19     for(int i=0;i<L.n;i++){
 20         printf("%c",L.ch[i]);
 21     }
 22     printf("
");
 23 }
 24 
 25 void Strlength(SeqString &L){                    //求串长
 26     printf("字符串L.ch的长度为:%d
",L.n);
 27 }
 28 
 29 int  concat(SeqString &L,char ch2[]){            //串连接
 30     int i=0,j;
 31     while(ch2[i]!=''){
 32         i++;
 33     }
 34     for(j=0;j<i;j++){
 35         L.ch[j+L.n]=ch2[j];
 36     }
 37     printf("将串ch2连接到L.ch后面,得到的新的字符串为:
%s
",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)
结果为:");
 45     for(int j=0;j<a;j++){
 46         if(L.ch[j]==ch2[j]){
 47             printf("0
");
 48             break; 
 49         }else if(L.ch[j]>ch2[j]){
 50             printf("1
");
 51             break; 
 52         }else {
 53             printf("-1
");
 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,m);
 62     for(i=n-1;i<n+m-1;i++){               
 63         printf("%c",L.ch[i]);
 64     }
 65     printf("
");
 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,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);
 93     for(int i=0;i<L.n;i++){
 94         printf("%c",L.ch[i]);
 95     }
 96     printf("
");
 97 }
 98 
 99 void Find (SeqString &L,char ch3[]){
100     int n=0,i,j,k;
101     while(ch3[n]!=''){
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的位置
",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("请输入一个字符串:
");
121     gets(ch1);
122     Assign(L,ch1);
123     DisqStr(L);
124     Strlength(L);
125     printf("请输入一个字符串ch2:
");
126     gets(ch2);
127     i=concat(L,ch2);
128     StrEqual(L,ch2,i);
129     printf("请问要查找第几个位置开始的几个字符:
");
130     scanf("%d %d",&n,&m);
131     InsStr(L,n,m);
132     printf("请问要在%s第几个位置插入字符串ch2:
",ch1);
133     scanf("%d",&k);
134     InStr(L,k,i,ch2);
135     printf("查找字符串ch3在L.ch字符串中的位置:
");
136     Find(L,ch3);
137     printf("请问要删除第几个位置开始的几个字符:
");
138     scanf("%d %d",&a,&b);
139     DelStr(L,a,b);
140     return 0;
141 }
原文地址:https://www.cnblogs.com/liuxun1031/p/10898693.html