C語言字符串函數入門
實現字符串庫函數功能
有些時候我們可能會被限制無法使用庫函數,這個時候我們需要編寫自己的庫函數。但瞭解瞭字符串庫函數的功能之後,想要實現並不困難,今天我們用數組和循環來簡單實現幾個字符串庫函數的功能。
1.strlen函數
strlen函數使用來求字符串長度的,遇到\0就會停止,並返回字符串的長度,接下來根據這個特性來編寫一下我們自己的strlen
int my_strlen(char string[]) { int count= 0; while (string[count] != NULL) { count++; } return count; }//也可以將while的判斷條件改為string[count]
有些小夥伴應該知道遞歸的實現,但是這裡涉及瞭指針的內容,我就不教大傢實現瞭
2.strcmp函數
strcmp字符串比較函數,對兩個字符串進行比較,相當返回0,前一個字符串大於後一個字符串會返回大於0的數,小於則返回小於0的數,至於具體返回多少,則需要看編譯器。
在實現strcmp功能之前,我們需要瞭解它的機制,strcmp是一個字符一個字符的比較ASCII值的
int my_strcmp(char string1[], char string2[]) { int i = 0; //當兩個字符串都沒有達到末端時,繼續比較 while ((string1[i] == string2[i]) && string1[i] && string2[i]) i++; return string1[i] - string2[i]; //當兩個字符串指向的字符不一樣或者到達終點時返回差值 }
一個簡單的while循環就能達到目的
3.strcpy函數
字符串拷貝函數,將後一個字符串拷貝到前一個字符串中,我們需要保證目的地足夠大
void my_strcpy(char string1[50], char string2[]) { int i = 0; while (string1[i++] = string2[i++]); } //這裡利用瞭賦值表達式的特性,直接進行賦值,當string[i]為\0時賦值完循環自動停止 //當然這個程序並不是完美的,根據strcpy的返回值我們還可以這樣修改 char* my_strcpy(char string1[50], char string2[]) { int i = 0; while (string1[i++] = string2[i++]); return string1; }//返回目的地的起始地址
4.strcat函數
strcat字符串追加,在一個字符串之後追加一個新的字符串,如果以strcpy的角度理解就是以第一個字符串的\0位置為起始地址進行字符串拷貝,那麼接下來就很簡單瞭
char* my_strcat(char string1[50], char string2[]) { int i = -1; while (string1[++i]);//循環停止時i指向\0 int j = 0; while (string1[i++] = string2[j++]); //與strcpy同理 return string1; }
5.strupr函數
strupr字符串大寫函數,將所有字符串中的小寫字母都變成大寫,我們隻需要根據ASCII值就可以簡單實現
char*my_strupr(char string[]) { int i = 0; while (string[i]) { //當string[i]指向\0時循環停止 if (string[i] >= 'a' && string[i] <= 'z') string[i] -= 32; i++; } return string; }
6.strlwr函數
和strupr對應,這是字符串小寫函數,把大寫轉成小寫,隻需要對上面的代碼簡單一改就可以
char*my_strlwr(char string[]) { int i = 0; while (string[i]) { //當string[i]指向\0時循環停止 if (string[i] >= 'A' && string[i] <= 'Z') string[i] += 32; i++; } return string; }
總結
本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!
推薦閱讀:
- C語言中“不受限制”的字符串函數總結
- C語言超詳細講解字符串函數和內存函數
- C語言字符串旋轉問題的深入講解
- 仿寫C語言string.h頭文件檢驗字符串函數
- 一篇文章帶你瞭解C語言的一些重要字符串與內存函數