C语言数据结构——串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MAXSIZE 100

typedef char ElemType;

typedef struct{
ElemType data[MAXSIZE];
int length;
}String;

String* initString()
{
String *s = (String*)malloc(sizeof(String));
s->length = 0;
return s;
}
//初始化串

int strAssign(String *s,char *chars)
{
int len = strlen(chars);
if(len > MAXSIZE)
{
printf("FULL.\n");
return 0;
}
for(int i = 0;i < len;i++)
{
s->data[i] = chars[i];
}
s->length = len;
return 1;
}
//把字符数组赋值给串

void strPrint(String *s)
{
for(int i = 0;i < s->length;i++)
{
printf("%c",s->data[i]);
}
printf("\n");
}
//输出串

int strLength(String *s)
{
return s->length;
}
//获取串长

int strCompare(String *s1,String *s2)
{
int min = s1->length < s2->length ? s1->length : s2->length;
for(int i = 0;i < min;i++)
{
if(s1->data[i] != s2->data[i])
{
return s1->data[i] - s2->data[i];
}
}
return s1->length - s2->length;
}
//比较两个串

int concat(String *s3,String *s1,String *s2)
{
if(s1->length + s2->length > MAXSIZE)
{
printf("FULL.\n");
return 0;
}
int index = 0;
for(int i = 0;i < s1->length;i++)
{
s3->data[index++] = s1->data[i];
}
for(int i = 0;i < s2->length;i++)
{
s3->data[index++] = s2->data[i];
}
s3->length = index;
return 1;
}
//串连接

int subString(String *sub,String *s,int pos,int len)
{
if(pos < 1 || pos > s->length || len < 0 || pos + len - 1 > s->length)
{
return 0;
}
for(int i = 0;i < len;i++)
{
sub->data[i] = s->data[pos - 1 + i];
}
sub->length = len;
return 1;
}
//求子串

int indexOf(String *s,String *t)
{
for(int i = 0;i <= s->length - t->length;i++)
{
int j = 0;
while(j < t->length && s->data[i + j] == t->data[j])
{
j++;
}
if(j == t->length)
{
return i + 1;
}
}
return 0;
}
//查找子串第一次出现的位置

int main()
{
String *s1 = initString();
String *s2 = initString();
String *s3 = initString();
String *sub = initString();
strAssign(s1,"Hello");
strAssign(s2,"World");
concat(s3,s1,s2);
strPrint(s3);
printf("%d\n",strLength(s3));
subString(sub,s3,2,4);
strPrint(sub);
printf("%d\n",indexOf(s3,s2));
return 0;
}