下面的代码实现了串的堆分配的大部分表示,只有clear清空串、截断字串没实现。代码如下:
#include
#include
#include
#ifndef TRUE
#define TRUE 1
#endif
#ifndef FALSE
#define FALSE 0
#endif
typedef int Status;
typedef struct{
char *ch;
int length;
}HString;
HString T;
HString M;
HString S = {
"fjds",
4,
};
Status StrAssign(HString *T, char *chars);
int StrLength(HString S);
int StrCompare(HString S, HString T);
Status ClearString(HString *S);
Status Concat(HString *T, HString S1, HString S2);
Status SubString(HString S, int pos, int len);
Status StrAssign(HString *T, char *chars)
{
int i, length;
if(T->ch) free(T->ch);
length = strlen(chars);
if(length == 0){
T->ch = NULL;
T->length = 0;
printf("the string length you give is zero.\n");
return TRUE;
}
T->ch = (char *)malloc(sizeof(char) * length);
if(T->ch == NULL){
printf("alloc memory for hstring failure.\n");
return FALSE;
}
T->ch = chars;
T->length = length;
return TRUE;
}
int StrLength(HString S){
return S.length;
}
int StrCompare(HString S, HString T)
{
int i;
for(i = 0; i < S.length && i < T.length; ++i){
if(S.ch[i] != T.ch[i]) return S.ch[i] - T.ch[i];
}
return S.length - T.length;
}
Status Concat(HString *T, HString S1, HString S2)
{
int i;
if(T->ch) free(T->ch);
T->ch = (char *)malloc((S1.length + S2.length)*sizeof(char));
if(T->ch == NULL)
return FALSE;
T->length = S1.length + S2.length;
for(i = 0; i < S1.length; i++){
T->ch[i] = S1.ch[i];
}
for(i = 0; i < S2.length; i++){
T->ch[S1.length+i] = S2.ch[i];
}
return TRUE;
}
Status SubString(HString S, int pos, int len)
{
if(pos < 1 || pos > S.length || len < 0 || len > S.length-pos+1) return FALSE;
if(S.ch) free(S.ch);
if(len == 0){
S.ch = NULL; S.length = 0;
}
}
int
main(void)
{
int length;
char *chars = "fjdskfjsl";
if(StrAssign(&T, chars))
printf("assign string success.\n");
else
printf("assign string failure.\n");
printf("the string length is %d.\n", StrLength(T));
if(StrCompare(S, T) >= 0)
printf("S is longer than T.\n");
else
printf("S is shorter than T.\n");
if(Concat(&M, T, S) > 0)
printf("concat success.\n");
else
printf("concat failure.\n");
printf("M = %s.\n", M.ch);
}
本文详细介绍了串的堆分配及其相关操作的实现过程,包括字符串赋值、长度计算、比较、清除、拼接和子串提取。通过实例代码展示了如何在C语言环境下进行这些操作。
1454

被折叠的 条评论
为什么被折叠?



