Character string

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 #include<string.h>
  4 #define maxsize 20
  5 typedef struct string{
  6     char ch[maxsize+1];
  7     int length;
  8 }seqString;
  9 
 10 //初始化字符串 
 11 void creatstring(seqString *s,char cts[])
 12  {
 13      int i=0;
 14      if(strlen(cts)>maxsize)
 15     {
 16         printf("串空间不足以容纳输入字符串!\n");
 17     }
 18 
 19      while(cts[i] != '\0')
 20      {
 21          s->ch[i]=cts[i];
 22         i++;    
 23     }
 24     s->length=strlen(cts);
 25     printf("字符串长度为:%d\n",s->length);
 26 }
 27 //打印字符串 
 28 void printstring(seqString s)
 29 {
 30     int i;
 31     printf("当前主串为:");
 32     for(i=0;i<s.length;i++)
 33     {
 34         if(s.ch[i]=='\0')
 35         break;
 36         else
 37         printf("%c",s.ch[i]);
 38     }
 39     printf("\n");
 40 }
 41 //连接两个字符串
 42 int concat(seqString *s,seqString *t)
 43 {
 44     int i,m;
 45     if(maxsize>s->length+t->length)
 46     {
 47         for(i=0;i<t->length;i++)
 48         {
 49             s->ch[i+s->length]=t->ch[i]; 
 50         }
 51         s->length=s->length + t->length;
 52         s->ch[s->length]='\0';
 53         printf("是否连接成功:连接成功!\n");
 54         printf("连接后的字符串如下:\n");
 55         for(i=0;i<s->length;i++)
 56             printf("%c",s->ch[i]);
 57             printf("\n");
 58             printf("连接后字符串长度为:%d\n",s->length); 
 59         return 1;
 60     }
 61     else if(s->length<maxsize)
 62     {
 63         m=maxsize-s->length;
 64         for(i=0;i<m;i++)
 65         {
 66             s->ch[s->length+i]=t->ch[i];
 67         } 
 68         s->length=maxsize;
 69         s->ch[maxsize]='\0';
 70         printf("是否连接成功:部分连接成功!\n");
 71             printf("连接后的字符串如下:\n");
 72         for(i=0;i<maxsize;i++)
 73             printf("%c",s->ch[i]);
 74         printf("\n");
 75         return 1;
 76     }
 77     else
 78         printf("连接失败,串空间不足以连接!\n");
 79         return 0; 
 80 }
 81 //子串的模式匹配
 82 int Find_BF(seqString *s,char p[])
 83 {
 84     int i,j,k;
 85     for(i=0;i<s->length-strlen(p);i++)
 86     {
 87         for(k=i,j=0;j<strlen(p);k++,j++)
 88         {
 89             if(s->ch[k] != p[j])
 90             {
 91                 printf("第%d次匹配失败!尝试第%d次!\n",i+1,i+2);    
 92                 break;
 93             }
 94             else
 95             continue;
 96         }
 97         if(j==strlen(p))
 98         {
 99             printf("第%d次匹配成功!\n",i+1);
100             printf("该子串在主串的第一个元素的位置为:%d\n",i+1);
101             return i;
102         }        
103     }    
104 }
105 //判断两个字符串是否相等
106 int comparestring(seqString s,seqString t)
107 {
108     int i,n;
109     if(s.length>t.length)
110         n=s.length;
111     else
112         n=t.length;
113     for(i=0;i<n;i++)
114     {
115         if(s.ch[i]>t.ch[i])
116         {
117             printf("字符串比较:前者字符串大于后者字符串!\n");
118             return 1;
119         }
120         else if(s.ch[i]<t.ch[i])
121         {
122             printf("字符串比较:前者字符串小于后者字符串!\n");
123             return -1;
124         }
125         else
126             continue;            
127     }
128     if(i==n)
129         printf("字符串比较:两个字符串相等!\n");
130 }
131 //求子串
132 void substring(seqString *s,int x,int y,char b[])
133 {
134     int i;
135     for(i=x-1;i<=y;i++)
136     {
137         b[i-x+1]=s->ch[i];    
138     }
139     printf("第%d个位置开始的%d个字符的子串如下:\n",x,y);
140     printf("%s ",b);    
141 } 
142 int main()
143 {
144     system("color b1");
145     int i,n,n1;
146     int id,longth;
147     seqString S,T;
148     
149     printf("请输入字符串S的字符串长度(<20):");
150     scanf("%d",&n);
151     char c[n];
152     printf("请为字符串S赋值:");
153     scanf("%s",&c); 
154     creatstring(&S,c);
155     printstring(S);
156     
157     printf("请输入字符串T的字符串长度(<20):");
158     scanf("%d",&n1);
159     char c1[n1];
160     printf("请为字符串T赋值:");
161     scanf("%s",&c1);
162     creatstring(&T,c1);
163     printstring(T);
164     
165     printf("\n");
166     comparestring(S,T);
167     
168     concat(&S,&T);
169     printstring(S);
170     
171     printf("请您在下方输入当前主串的任意子串,我们接下来将为您进行子串的模式匹配!\n");
172     char c2[maxsize];
173     scanf("%s",&c2);
174     Find_BF(&S,c2);
175     
176     printf("请输入您要从何处开始的位置,以及子串的长度:");
177     scanf("%d%d",&id,&longth);
178     char c3[maxsize];
179     substring(&S,id,longth,c3); 
180     return 0;
181  } 
复制代码

运行结果如下:

字符串大小比较的算法如下:

posted on 2019-05-18 11:26  52.Hz  阅读(190)  评论(0编辑  收藏  举报