C语言数据结构之动态分配实现串

  

<强> 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语言数据结构之动态分配实现串