描述:c語言中對於字串型別並未定義,但存在許多有關字串的庫函式。
例如:strstr(在原串中匹配子串)strcpy(將原串內容拷貝到目標串中),
strncpy(
原串內容拷貝到目標串---
可控拷貝數),
strcmp(比較兩個字串的內容),strcat(字串的追加)
等等,我們可以自己編寫程式實現以上功能的函式,而不呼叫庫函式。可以對照庫函式進行學習,提高自身的程式設計能力。
1、模擬strcpy函式(複製字串)
#include#include#include#includechar * my_strcpy(char *dest, const char *src)
int main()
2、模擬實現strncpy函式(字串複製-----可控複製位元組數量)
#include#include#include#includechar *my_strncpy(char *dest, const char *src, size_t count)
*dest = '\0';//字串最後要加上'\0'
return ret;
}int main()
3、模擬strcmp函式(比較兩個字元/字串大小)
#include#include#includeint my_strcmp(const char *dest, const char *src)
if (*(unsigned char*)dest == '\0')
ret = 0;//*dest為0時,表示比較完了,兩個字串相等,返回0
else
ret = *(unsigned char*)dest - *(unsigned char*)src;//兩個字串不等返回兩個字串的差(強制轉換型別)
return ret;
}int main()
4、模擬實現strncmp函式(字串比較------可控比較位元組數量)
#include#include#include#includeint my_strncmp(const char *str1, const char *str2,size_t count)
if (count == 0)//count=0表示比較完成,兩個字串相等
ret = 0;
else
ret = *(unsigned char*)str1 - *(unsigned char*)str2;//注意此處需要強制型別轉換
return ret;
}int main()
5、模擬strcat函式(追加/合併字串)
#include#include#include#includechar * my_strcat(char *dest, const char *src)
int main()
6、模擬實現strncat函式(字串追加-------可控追加位元組數量)
#define _crt_secure_no_warnings//使用scanf時需要加在標頭檔案(vs2013中)
#include#include#include#includechar *my_strncat(char *dest,char *src,int count)
int main()
7、模擬實現strstr函式(
判斷乙個字串是不是另乙個字串的子字串
)
#include#include#include#includechar *my_strstr(const char *str1,const char *str2)
if (*p2 == '\0')//成功匹配p2中每乙個字元,返回p(子字串開始處)
return p;
p++;//p1和p2匹配沒成功,p1指向下乙個字元,重新與p2進行匹配
} return null;
}int main()
上述程式執行結果為:cdefgh
8、模擬實現memset函式(記憶體賦值或資料重置-----可控賦值位元組數量)
#include#include#include//memset作用是在一段記憶體塊中填充某個給定的值,它對較大的結構體或陣列進行清零操作的一種最快方法
void *my_memset(void *dest, int c, size_t count)
return dest;
}int main()
;//memset是按位元組賦值
int len = sizeof(arr) / sizeof(arr[0]);
int i;
my_memset(arr, 0, len);
for (i = 0; i < len; i++)
system("pause");
return 0;
}
9、模擬實現memcmp函式(記憶體中的內容比較大小-----可控比較位元組數量)
#include#include#includeint my_memcmp(const void *p1, const void *p2, size_t count)
} if (count == 0)
ret = 0;
else
ret = *(unsigned char *)dest - *(unsigned char *)src;;
return ret;
}int my_memcmp(const void *s1,const void *s2,size_t count)
int main()
本文出自 「scen」 部落格,請務必保留此出處 常用字串處理函式
1626 5 劉小銘總結 2016年10月19日 連續19天總結 內容 a 一句話概括今日目標完成情況 常用字串處理函式 80 b 具體內容 昨天看了string字串那一節課,今天看了書上的常用字串處理函式,並沒有看見昨天所使用的那一種。尷尬 今天呢,看了一下,常用字串處理函式,有複製 貼上 比較 ...
linux c常用字串處理函式
一 puts 名稱 puts 功能 向顯示器輸出字串。標頭檔案 include 函式原形 int puts const char s 引數 s 字串 返回值 成功返回輸出的字元數,失敗返回eof put函式與printf函式在字串輸出中的區別 puts在輸出字串時,遇到 0 會自動終止輸出,並將 0...
linux c常用字串處理函式
一 puts 名稱 puts 功能 向顯示器輸出字串。標頭檔案 include h 函式原形 intputs const char s 引數 s 字串 返回值 成功返回輸出的字元數,失敗返回eof put函式與printf函式在字串輸出中的區別 puts在輸出字串時,遇到 0 會自動終止輸出,並將 ...