#include <stdio.h> #include <stdlib.h> #include <string.h> #define CHUNKSIZE 10 #define stuff '#' typedef struct Chunk { char ch[CHUNKSIZE]; struct Chunk *next; }Chunk;//串的结点类型定义 typedef struct { Chunk *head; Chunk *tail; int length; }LinkString; void InitString(LinkString *S);//初始化字符串 int StrAssign(LinkString *S,char *cstr);//生成串 int StrEmpty(LinkString S);//推断出串是否为空 int StrLength(LinkString S);//求串长度 int StrCopy(LinkString *T,LinkString S);//串的复制操作 int ToChars(LinkString S,char **cstr);//串的转换操作 int StrCompare(LinkString S,LinkString T);//串的比較操作 int StrConcat(LinkString *T,LinkString S);//串的连接操作 int StrInsert(LinkString *S,int pos,LinkString T);//串的插入操作 int StrDelete(LinkString *S,int pos,int len);//串的删除操作 int SubString(LinkString *Sub,LinkString S,int pos,int len);//取子串操作 void ClearString(LinkString *S);//清空串操作 #include "LinkString.h" void InitString(LinkString *S)//初始化字符串 { S->length = 0; S->head = NULL; S->tail = NULL; } int StrAssign(LinkString *S,char *cstr)//生成串 { Chunk *p,*q; int i,j,k,len; len = strlen(cstr); if(!len) { return 0; } S->length = len; j = len/CHUNKSIZE; if(len % CHUNKSIZE) { j++; } for(i = 0;i < j;i++) { p = (Chunk*)malloc(sizeof(Chunk)); if(!p) { return 0; } for(k = 0;k < CHUNKSIZE && *cstr;k++) { *(p->ch + k) = *cstr++; } if(0 == i) { S->head = q; q = p; } else { q->next = p; q = p; } if(!*cstr) { S->tail = q; q->next = NULL; for(;k < CHUNKSIZE;k++) { *(q->ch + k) = stuff; } } } return 1; } int StrEmpty(LinkString S)//推断出串是否为空 { if(S.length == 0) { return 1; } else { return 0; } } int StrLength(LinkString S)//求串长度 { return S.length; } int StrCopy(LinkString *T,LinkString S)//串的复制操作 { char *str; int flag; if(!ToChars(S,&str)) { return 0; } flag = StrAssign(T,str); free(str); return flag; } int ToChars(LinkString S,char **cstr)//串的转换操作 { Chunk *p = S.head ; int i; char *q; *cstr = (char*)malloc((S.length + 1)*sizeof(char)); if(!cstr||!S.length) { return 0; } q = *cstr; while(p) { for(i = 0;i < CHUNKSIZE;i++) { if(p->ch[i] != stuff) { *q++ = (p->ch[i]); } } p = p->next ; } (*cstr)[S.length] = 0; return 1; } int StrCompare(LinkString S,LinkString T)//串的比較操作 { char *p,*q; int flag; if(!ToChars(S,&p)) { return 0; } if(!ToChars(T,&q)) { return 0; } for(;*p != '