C语言实现串,和简单的主函数测试

来源:互联网 发布:数据新闻手册 pdf 编辑:程序博客网 时间:2024/04/29 12:55
#include<stdio.h>#include<stdlib.h>#define OK 1#define FALSE 0#define Status inttypedef struct{char *ch;int length;}HString;//构造一个串T和chars相同Status StrAssign (HString **T ,char *chars){int len,j;char *c;if((*T)->ch)free((*T)->ch);else{for(len = 0,c=chars; *c;c++,len++);if(!len)fprintf(stderr,"chars is empty\n");(*T)->ch = (char *)malloc(sizeof(char) * len);if(!(*T)->ch)fprintf(stderr,"error\n");for(j=0;j<len;j++){(*T)->ch[j] = chars[j];(*T)->length++;}}return OK;}//返回串的元素个数(长度)Status StrLength(HString *T){char *c;int len;if(!T->ch)fprintf(stderr,"empty error\n");else{for(len=0,c=T->ch;*c;len++,c++);}return len;}//比较串s,和串TStatus 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);}//清空串TStatus StrClear(HString *T){if(!(T->length))fprintf(stderr,"empty error\n");else{free(T->ch);T->ch = NULL;T->length =0;}return OK;}//把串S1和串s2拼接成一个串TStatus StrCat(HString **T,HString *s1,HString *s2){int i;int len1,len2,len;if((*T)->ch)free((*T)->ch);len = s1->length + s2->length;(*T)->ch = (char *)malloc(sizeof(char)*len);for(i=0;i<s1->length;i++)(*T)->ch[i] = s1->ch[i];for(i=s1->length ; i<len;i++)(*T)->ch[i] = s2->ch[i-s1->length];return OK;}//用sub返回串T的第pos个元素起len长度的子串Status SubString(HString **sub,HString *T,int pos,int len){int i;if((*sub)->ch)free((*sub)->ch);if(T->length < len){fprintf(stderr,"error len\n");return FALSE;}if(pos < 0){fprintf(stderr,"error pos\n");return FALSE;}(*sub)->ch = (char *)malloc(sizeof(char)*len);for(i=0;i<len;i++){(*sub)->ch[i] = T->ch[pos+i];(*sub)->length++;}return OK;}//输出串T的所有元素Status OutString(HString *T){int i;if(!T->length)fprintf(stderr,"empty error\n");for(i=0;i<T->length;i++)printf("%c",T->ch[i]);printf("\n");return OK;}int main(void){HString *T;HString *sub;sub =(char *)malloc(sizeof(char)); T = (char *)malloc(sizeof(char));char *chars="abcdefg";StrAssign(&T,chars);SubString(&sub,T,2,3);OutString(sub);OutString(T);return 0;}

0 0
原创粉丝点击