自己動手寫字串庫函式 一(C語言實現)
阿新 • • 發佈:2019-01-08
在coding中最常使用的就是對於字串的處理問題,接下來我們自己動手寫庫函式,儘量使用指標操作,而不是陣列操作
//標頭檔案 string.h #include <stdio.h> #include <stdlib.h> //字串結構體 typedef struct CString { char* str; int len; }string; //初始化 void Init(string* str); void Init_With_Len(string* str, int len); void Init_With_Str(string*str, const char*strcopy); //列印字串 void Print_String(string*str); //追加字元 void Append_Char(string*str, const char s); //追加字串 void Append_Str(string*str, const char*s); //計算字串的長度 int my_StrLen(const char*str); //字串複製 char* my_StrCopy(string*des, const char*sour); //字串連線 char* my_StrCat(string*des, char* sour); //字元查詢 char* my_Strchr(string*des, char ch); //字串查詢 char* my_FindStr(string*des, char*sour); //刪除指定的字元 void my_DelChar(string*des, char ch); //指定的位置插入字元 void my_InsertChar(string*des, char ch,int pos); //判斷是否為空 int IsEmpty(string*strs);
//函式的具體實現 string.c #include "String.h" //判斷是否為空 int IsEmpty(string*strs) { //先判斷strs是否為空 再判斷strs->str是否為空 if (strs == NULL || strs->str == NULL) return 0; else return 1; } //獲取字串的長度 int my_StrLen(const char*str) { if (str == NULL) return -1; int count = 0; while (*str++ != '\0') count++; return count; } //初始化 void Init(string* str) { str->str = NULL; str->len = 0; } void Init_With_Len(string*str, int len) { str->str = (char*)calloc(len, sizeof(char)); str->len = len; } void Init_With_Str(string*strs, const char* strcopy) { if ( IsEmpty(strs) != 0|| strcopy == NULL) return; else { //計算字串的長度 int count = my_StrLen(strcopy); //注意使用calloc進行空間的分配 count+sizeof(char) 是為了最後一個放入'\0' strs->str = (char*)calloc(count + sizeof(char), sizeof(char)); strs->len = count + sizeof(char); //strcpy(strs->str, strcopy); strs->str = my_StrCopy(strs, strcopy); } } //字串複製 char* my_StrCopy(string*des, const char*sour) { if (des->str == NULL || sour == NULL) return NULL; char* strTmp = des->str; int sourLen = my_StrLen(sour); while (*sour != '\0') *strTmp++ = *sour++; *(des->str + sourLen) = '\0'; des->len = sourLen; return des->str; } //列印字串 void Print_String(string* strs) { if (IsEmpty(strs) != 0) printf("%s\n ", strs->str); else return; }
//主函式中測試 main.c
#include "String.h"
int main()
{
string strs;
Init_With_Str(&strs,"tasklist");
Print_String(&strs);//result: tasklist
}