-
-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathstring.cpc
More file actions
182 lines (144 loc) · 3.87 KB
/
string.cpc
File metadata and controls
182 lines (144 loc) · 3.87 KB
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
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
FUNCTION Split(s : STRING, sep : STRING) RETURNS ARRAY
DECLARE result : ARRAY[1:LENGTH(s)] OF STRING
DECLARE from : INTEGER
DECLARE item : INTEGER
from <- 1
item <- 1
FOR i <- 1 TO LENGTH(s)
IF MID(s, i, LENGTH(sep)) = sep THEN
result[item] <- MID(s, from, i-from)
item <- item + 1
from <- i + 1
ENDIF
NEXT i
result[item] <- MID(s, from, LENGTH(s)-from+1)
DECLARE returnArr : ARRAY[1:item] OF STRING
FOR i <- 1 TO item
returnArr[i] <- result[i]
NEXT i
RETURN returnArr
ENDFUNCTION
FUNCTION TrimStart(s : STRING) RETURNS STRING
DECLARE len : INTEGER
len <- LENGTH(s)
DECLARE result : STRING
DECLARE c : STRING
DECLARE flag : BOOLEAN
// 从前往后查看
flag <- TRUE
FOR i <- 1 TO len
c <- MID(s, i, 1)
IF c = ' ' AND flag THEN
PASS
ELSE
result <- result & c
flag <- FALSE
ENDIF
NEXT i
RETURN result
ENDFUNCTION
FUNCTION TrimEnd(s : STRING) RETURNS STRING
DECLARE len : INTEGER
len <- LENGTH(s)
DECLARE result : STRING
DECLARE c : STRING
DECLARE flag : BOOLEAN
// 从后往前查看
flag <- TRUE
FOR i <- len TO 1 STEP -1
c <- MID(s, i, 1)
IF c = ' ' AND flag THEN
PASS
ELSE
result <- c & result
flag <- FALSE
ENDIF
NEXT i
RETURN result
ENDFUNCTION
FUNCTION Trim(s : STRING) RETURNS STRING
RETURN TrimStart(TrimEnd(s))
ENDFUNCTION
FUNCTION ArrayFromString(s : STRING) RETURNS ARRAY
DECLARE len : INTEGER
len <- LENGTH(s)
DECLARE arr : ARRAY[1:len] OF STRING
FOR i <- 1 TO len
arr[i] <- MID(s, i, 1)
NEXT i
RETURN arr
ENDFUNCTION
FUNCTION Contains(s : STRING, target : STRING) RETURNS BOOLEAN
DECLARE targetLen : INTEGER
targetLen <- LENGTH(target)
FOR i <- 1 TO LENGTH(s) STEP targetLen
IF MID(s, i, targetLen) = target THEN
RETURN TRUE
ENDIF
NEXT i
RETURN FALSE
ENDFUNCTION
FUNCTION Join(sep : STRING, BYREF list : ARRAY, start : INTEGER, end : INTEGER) RETURNS STRING
DECLARE r : STRING
FOR i <- start TO end
IF i = end THEN
r <- r & list[i]
ELSE
r <- r & list[i] & sep
ENDIF
NEXT i
RETURN r
ENDFUNCTION
FUNCTION Reverse(s : STRING) RETURNS STRING
DECLARE r : STRING
FOR i <- LENGTH(s) TO 0 STEP -1
r <- r & MID(s, i, 1)
NEXT i
RETURN r
ENDFUNCTION
FUNCTION Replace(s : STRING, from : STRING, to : STRING) RETURNS STRING
CONSTANT arr = Split(s, from)
RETURN Join(to, arr, 1, LENGTH(arr))
ENDFUNCTION
FUNCTION EndsWith(base : STRING, suffix : STRING) RETURNS BOOLEAN
CONSTANT baseLen = LENGTH(base)
CONSTANT suffixLen = LENGTH(suffix)
IF baseLen < suffixLen THEN
RETURN FALSE
ENDIF
RETURN MID(base, baseLen - suffixLen + 1, suffixLen) = suffix
ENDFUNCTION
FUNCTION StartsWith(base : STRING, prefix : STRING) RETURNS BOOLEAN
CONSTANT baseLen = LENGTH(base)
CONSTANT prefixLen = LENGTH(prefix)
IF baseLen < prefixLen THEN
RETURN FALSE
ENDIF
RETURN MID(base, 1, prefixLen) = prefix
ENDFUNCTION
FUNCTION STR_TO_NUM(s : STRING) RETURNS REAL
RETURN REAL(s)
ENDFUNCTION
FUNCTION NUM_TO_STR(s : REAL) RETURNS STRING
IF INT(s) = s THEN
RETURN STRING(INT(s))
ELSE
RETURN STRING(s)
ENDIF
ENDFUNCTION
FUNCTION CHR(n : INTEGER) RETURNS CHAR
DECLARE r : STRING
r <- PYTHON("_result=chr(n)", n)
RETURN r
ENDFUNCTION
FUNCTION ORD(s : CHAR) RETURNS INTEGER
DECLARE r : INTEGER
r <- PYTHON("_result=ord(s)", s)
RETURN r
ENDFUNCTION
FUNCTION ASCII(s : CHAR) RETURNS INTEGER
RETURN ORD(s)
ENDFUNCTION
FUNCTION SUBSTRING(s : STRING, start : INTEGER, size : INTEGER) RETURNS STRING
RETURN MID(s, start, size)
ENDFUNCTION