forked from kangjianwei/Data-Structure
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathHString.h
159 lines (138 loc) · 2.37 KB
/
HString.h
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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
/*=========================
* 串的堆分配存储表示(堆串)
*
* 包含算法: 4.4
==========================*/
#ifndef HSTRING
#define HSTRING
#include <stdio.h>
#include <stdlib.h> // 提供malloc、realloc、free、exit原型
#include <string.h> // 提供strlen原型
#include "Status.h" //**▲01 绪论**//
/*
* 串的堆存储表示
*
* 注:有效元素从ch的0号单元开始存储
*/
typedef struct {
char* ch; // 若是非空串,则按串长分配存储区,否则ch为NULL
int length;
} HString;
/*
* ████ 提示 ████
*
* 遵循教材的书写习惯,pos指示字符的位序(不是索引),从1开始计数
*/
/*
* 初始化
*
* 构造一个值为chars的串T。
*
*【注】
* 该操作属于最小操作子集
*/
Status StrAssign(HString* T, const char* chars);
/*
* 销毁
*
* 将串S销毁。
*/
Status DestroyString(HString* S);
/*
* 清空
*
* 将串S清空。
*/
Status ClearString(HString* S);
/*
* 判空
*
* 判断串S中是否包含有效数据。
*
* 返回值:
* TRUE : 串S为空
* FALSE: 串S不为空
*/
Status StrEmpty(HString S);
/*
* 计数
*
* 返回串S中元素的个数。
*
*【注】
* 该操作属于最小操作子集
*/
int StrLength(HString S);
/*
* 求子串
*
* 用Sub返回S[pos, pos+len-1]。
* 返回值指示是否截取成功。
*
*【注】
* 该操作属于最小操作子集
*/
Status SubString(HString* Sub, HString S, int pos, int len);
/*
* 查找
*
* 从pos处开始搜索模式串T在主串S中首次出现的位置,如果不存在,则返回0。
* 如果查找成功,返回匹配的位置。
*
*【注】
* 1.此实现需要依赖串的最小操作子集
* 2.该实现比较低效
*/
int Index(HString S, HString T, int pos);
/*
* ████████ 算法4.4 ████████
*
* 插入
*
* 将串T插入到主串S的pos位置处。
*/
Status StrInsert(HString* S, int pos, HString T);
/*
* 删除
*
* 删除S[pos, pos+len-1]。
*/
Status StrDelete(HString* S, int pos, int len);
/*
* 比较
*
* 比较串S和串T,返回比较结果。
*
*【注】
* 该操作属于最小操作子集
*/
Status StrCompare(HString S, HString T);
/*
* 复制
*
* 将串S复制到串T。
*/
Status StrCopy(HString* T, HString S);
/*
* 替换
*
* 用V替换主串S中出现的所有与T相等的且不重叠的子串。
*
*【注】
* 1.该操作依赖最小操作子集
* 2.该实现比较低效
*/
Status Replace(HString* S, HString T, HString V);
/*
* 串联接
*
* 联接S1和S2,并存储到T中返回。如果联接后的长度溢出,则只保留未溢出的部分。
* 返回值表示联接后的串是否完整。
*
*【注】
* 该操作属于最小操作子集
*/
Status Concat(HString* T, HString S1, HString S2);
// 输出:打印字符串
void StrPrint(HString S);
#endif