HString.h #ifndef HSTRING_H_H #define OK 0 #define ERROR -1 typedef struct { char *ch; int length; }HString; int hstr_assign(HString*, const char*); int hstr_print(HString*); int hstr_length(HString*); int hstr_compare(HString*, HString*); int hstr_clearString(HString*); int hstr_strcat(HString*, HString*, HString*); int hstr_subString(HString*, HString*, int, int); #endif HString.cpp #include<stdio.h> #include<stdlib.h> #include"HString.h" int hstr_assign(HString *T, const char *str) { if(!T->length) free(T->ch); if(str == "") { T->ch = NULL; T->length = 0; return ERROR; } int str_len = 0; while(str[str_len++] != '/0'); str_len -= 1; T->length = str_len; if(!(T->ch = (char*)malloc(sizeof(char) * str_len))) return ERROR; str_len = 0; while(str[str_len] != '/0') { T->ch[str_len] = str[str_len++]; } return OK; } int hstr_length(HString *T) { return T->length; } int hstr_compare(HString *T, HString *S) { if(0 == T->length && 0 == S->length) return ERROR; int T_len = T->length; int S_len = S->length; int ix = 0; while(T_len != 0 && S_len != 0) { if((int)T->ch[ix] < (int)S->ch[ix]) { return -1; } else if((int)T->ch[ix] > (int)S->ch[ix]) { return 1; } ix++; T_len--; S_len--; } if(T_len == S_len) return 0; else if(T_len == 0) return -1; else return 1; return OK; } int hstr_clearString(HString *T) { if(T->ch) { free(T->ch); T->length = 0; } return OK; } int hstr_strcat(HString *L, HString *T, HString *S) { if(!T->length && !S->length) return ERROR; int T_len = T->length; int S_len = S->length; int L_len = T_len + S_len; L->length = L_len; if(!(L->ch = (char*)malloc(sizeof(char) * L_len))) return ERROR; int ix = 0; int jx = 0; while(T_len-- > 0) { L->ch[ix++] = T->ch[jx++]; } jx = 0; while(S_len-- > 0) { L->ch[ix++] = S->ch[jx++]; } return OK; } int hstr_subString(HString *T, HString *sub, int pos, int len) { if(!T->length || pos < 1 || pos > T->length || len < 1 || len > T->length - pos + 1) return ERROR; if(!(sub->ch = (char*)malloc(sizeof(char) * len))) return OK; sub->length = len; int ix = 0; pos--; while(len-- > 0) { sub->ch[ix++] = T->ch[pos++]; } return OK; } int hstr_print(HString *T) { if(0 == T->length) return ERROR; int len = 0; while(len < T->length) { printf("%c",*(T->ch + len)); len++; } printf("/n"); return OK; }