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 }
运行结果如下:

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

原文:https://www.cnblogs.com/zhangkaiz/p/10885125.html