7 MString
mystring_new(int size
, int incr
) {
8 MString string
= calloc(1, sizeof(struct mystring
));
9 string
->str
= malloc((size
+1)*sizeof(char));
10 string
->str
[0] = '\0';
12 string
->maxlen
= size
;
18 void mystring_clear(MString string
) {
20 string
->str
[0] = '\0';
23 void mystring_enlarge(MString string
) {
24 string
->maxlen
+= string
->incr
;
25 string
->str
= realloc(string
->str
, (string
->maxlen
+ 1) * sizeof(char));
28 void mystring_char_append(MString string
, char toinsert
) {
29 if (string
->len
== string
->maxlen
) {
30 mystring_enlarge(string
);
32 string
->str
[string
->len
] = toinsert
;
33 string
->str
[string
->len
+1] = '\0';
37 void mystring_str_append(MString string
, char *toinsert
) {
39 for (i
= 0; toinsert
[i
] != '\0'; i
++) {
40 mystring_char_append(string
, toinsert
[i
]);
44 void mystring_free(MString string
) {
49 int mystring_getline(MString string
, FILE *file
) {
52 while ((c
= fgetc(file
)) != EOF
&& c
!= '\n') {
53 mystring_char_append(string
, c
);
56 if (count
== 0 && c
== EOF
) {
62 void mystring_truncate(MString string
, int index
) {
63 string
->str
[index
] = '\0';
64 string
->len
-= string
->len
- index
;
67 void mystring_erase(MString string
, int index
, int len
) {
68 memmove(&string
->str
[index
], &string
->str
[index
+len
], string
->len
-len
);
70 string
->str
[string
->len
] = '\0';
73 int mystring_has_prefix(MString string
, char *substr
) {
74 return !strncmp(string
->str
, substr
, strlen(substr
));
77 int mystring_has_suffix(MString string
, char *substr
) {
78 return !strcmp(string
->str
+ string
->len
- strlen(substr
), substr
);
81 int mystring_strip(MString string
) {
88 for (i
= string
->len
- 1; i
>= 0; i
--){
89 if (!isspace(string
->str
[i
])) {
93 if (i
+1 < string
->len
) mystring_truncate(string
, i
+1);
95 for (i
= 0; i
< string
->len
; i
++) {
96 if (!isspace(string
->str
[i
])) {
101 mystring_erase(string
, 0, i
);