一个能够自动扩容的顺序结构的串 ArrString (GCC编译)。
1 /** 2 * @brief C语言 串 顺序结构 实现 3 * @author wid 4 * @date 2013-11-01 5 * 6 * @note 若代码存在 bug 或程序缺陷, 请留言反馈, 谢谢! 7 */ 8 9 #include <stdio.h> 10 #include <stdlib.h> 11 #include <string.h> 12 13 #define TRUE 1 14 #define FALSE 0 15 #define NPOS -1 16 17 typedef struct 18 { 19 char *str; 20 int len; 21 int size; 22 }ArrString; //串结构 23 24 //字符串方法声明 25 ArrString *CreateString( const char *szStr ); ///创建一个初始值为 szStr 的串 26 void DestroyString( ArrString *pStr ); ///销毁串 pStr 27 void ClearString( ArrString *pStr ); ///置空串 pStr 28 int IsEmpty( const ArrString *const pStr ); ///是否为空串 29 int StrLength( const ArrString *const pStr ); ///获取串长度 30 int StrCopy( ArrString *pDest, const ArrString *const pSrc ); ///将串 pSrc 复制到 pDest 31 int StrCat( ArrString *pDest, ArrString *pSrc ); ///将串 pSrc 连接到 pDest 后 32 int SubStr( ArrString *pStr, ArrString *pSub, int nPos, int nLen ); ///取子串 33 int IndexStr( const ArrString *const pStr, const ArrString *const pSub, int nPos ); ///子串在串pStr中第一次出现的位置 34 int InsertStr( ArrString *pDest, const ArrString *const pSrc, int nPos ); ///将 pSrc 插入到 pDest 的 nPos 处 35 int EraseStr( ArrString *pStr, int nStart, int nEnd ); ///擦除 nStart 至 nEnd 间的子串 36 int ReplaceStr( ArrString *pStr, ArrString *pFind, ArrString *pReplace ); ///串替换 37 int StrCompare( const ArrString *const pStr_a, const ArrString *const pStr_b ); ///串比较 38 char *ToCString( const ArrString *const pStr ); ///转换为C风格字符串 39 40 //字符串方法实现 41 42 /** 43 * @brief 创建一个初始值为 szStr 的串 44 * 45 * @param szStr 指向一条以 ` ` 结束的字符串 46 * 47 * @return 返回指向新建的串的指针 48 */ 49 ArrString *CreateString( const char *szStr ) 50 { 51 int nSrcLen = strlen( szStr ); 52 53 ArrString *pStr = (ArrString *)malloc( sizeof(ArrString) ); 54 pStr->str = (char *)malloc( nSrcLen + 1 ); 55 strcpy( pStr->str, szStr ); 56 pStr->len = nSrcLen; 57 pStr->size = nSrcLen + 1; 58 59 return pStr; 60 } 61 62 /** 63 * @brief 销毁串 pStr 64 * 65 * @param pStr 指向待销毁的串 66 */ 67 void DestroyString( ArrString *pStr ) 68 { 69 free( pStr->str ); 70 free( pStr ); 71 } 72 73 /** 74 * @brief 置空串 pStr 75 * 76 * @param 指向待置空的串 77 */ 78 void ClearString( ArrString *pStr ) 79 { 80 pStr->str[0] = '