<强> C语言数据结构之动态分配实现串强>
说明:堆分配存储实现串时,串并不是以' \ 0 ',而是用数据项int长度来表示的,所以和传统的c语言操作字符串有所不同。
头文件
的ifndef PILEHEAD_H_INCLUDED #定义PILEHEAD_H_INCLUDED # include & lt; stdio.h> # include & lt; stdlib.h> 类型定义结构体 { char * ch; int len; }HString; int StrAssign (HString * pstr, char * pch); int StrLength (HString * pstr); int StrCompaer (HString * pstr1, HString * pstr2); int StrClear (HString * pstr); int StrConcat (HString * pstr, HString str1, HString str2); int StrSub (HString *子,HString pstr, pos int, int长度); int StrPrint (HString * pstr); # endif//PILEHEAD_H_INCLUDED >之前函数实现
# include“pilehead.h” int StrAssign (HString * pstr, char * pch) { 如果(! pstr→len) { 免费(pstr→ch); } int我; (我=0;pch[我]!=' \ 0 ';我+ +) { ; } 如果(i==0) { pstr→ch=零; pstr→len=0; } 其他的 { pstr→ch=(char *) malloc(我* sizeof (char)); pstr→len=我; } 我=0; 虽然(我& lt;pstr→len) { pstr→ch[我]=pch[我]; 我+ +; } 返回0; } int StrPrint (HString * pstr) { int i=0; 虽然(我& lt;pstr→len) { printf (" % c”, pstr→ch[我]); 我+ +; } printf (" \ n "); 返回0; } int StrLength (HString * pstr) { 返回pstr→len; } int StrCompaer (HString * pstr1, HString * pstr2) { int i=0; int ret=0; 虽然(我& lt;pstr1→len,,我& lt; pstr2→len) { ret=pstr1→ch[我]——pstr2→ch(我); 如果(ret & lt;0) { 返回1; } else if (ret祝辞0) { 返回1; } 其他的 { 我+ +; } } int diff=pstr1→len——pstr2→len; 如果(diff & lt;0) { 返回1; } else if (diff==0) { 返回0; } 返回1; } int StrClear (HString * pstr) { 如果(pstr→ch) { 免费(pstr→ch); pstr→ch=零; } pstr→len=0; 返回0; } int StrConcat (HString * pstr, HString str1, HString str2) { StrClear (pstr); StrAssign (pstr str1。ch); int len=str1。兰; int len2=0; 而(len2 & lt;str2。兰) { pstr→ch (len + +)=str2。ch (len2 + +); } pstr→len=str1。len + str2。兰; 返回0; } int StrSub (HString *子,HString pstr, pos int, int长度) { 如果(pos & lt;1 | | pos祝辞pstr。len | |长度& lt;1 | |长度比;pstr。莱恩- pos + 1) { printf("错误!\ n”); 退出(1); } StrClear(子); 子→ch=(char *) malloc(长度* sizeof (char)); 子→len=长度; int i=0; 虽然(我& lt;长度) { 子→ch[我]=pstr。ch (pos - 1 + i); 我+ +; } 返回0; } >之前测试函数
# include“pilehead.h” int main () { HString str; HString str1; HString str2; char * pch=癮bcd”; StrAssign(和str, pch); StrAssign(及str1“abcd”); StrAssign(及str2 fhasdifhos); StrPrint(及str); StrPrint(及str1);/* StrClear(及str); StrPrint(及str); int i=StrCompaer(及str,和str1); printf (" % d”,我);*/StrConcat(及str, str1 str2); StrPrint(及str); HString年代; StrSub (str和年代,4、5); StrPrint (,); 返回0; } >之前如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
C语言数据结构之动态分配实现串