您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關如何用C語言模擬實現字符串函數,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
編程過程中經常會使用到一些字符串函數,這些字符串函數都在C語言標準庫中,我們可以直接使用。但我們也要了解一下它們是如何實現的。
strlen函數是用來求字符串長度的。官方給出的解釋如圖
返回值類型是無符號整型,參數類型是char*,遇見\0停止。
strlen的模擬實現有三種方法,1、count計數。2、遞歸。3、指針減指針。
count計數
#include <stdio.h> int my_strlen(const char* str) { int count = 0; while (*str++) { count++; } return count; } int main() { char str[] = "abcdefg"; int len = my_strlen(str); printf("%d", len); return 0; }
遞歸
#include <stdio.h> int my_strlen( const char* str) { if (*str == '\0') { return 0; } else { return my_strlen(++str) + 1; } } int main() { char str[] = "abcdefg"; int len = my_strlen(str); printf("%d", len); return 0; }
指針減指針
#include <stdio.h> int my_strlen(const char* str) { char* p = str; while (*p) { p++; } return p - str; } int main() { char str[] = "abcdefg"; int len=my_strlen(str); printf("%d", len); return 0; }
strcpy函數是字符串拷貝函數。就是把源地址字符串拷貝到目的地址去。源地址字符串必須有\0。目的地址必須足夠大。源地址字符串的\0也會拷貝過去,返回目的地址的地址。
官方解釋如圖
模擬實現
#include <stdio.h> char* my_strcpy(char* dest,const char* sour) { char* p=dest; while (*dest++ = *sour++) { ; } return p; } int main() { char sur[] = "abcdefg"; char dest[10] = { 0 }; printf("%s", my_strcpy(dest,sur)); return 0; }
strcat函數是字符串追加函數。就是把源地址字符串追加到目的地址后邊。要注意的是當遇見源地址的\0時停止,目的地址必須可修改,且足夠大。strcat函數不能用于追加字符串自己,會越界,根本停不下來。
官方解釋如圖
模擬實現
#include <stdio.h> char* my_strcat(char* str2,const char* str1) { char* p = str2; while (*str2++){ ; } str2--; while (*str2++ = *str1++) { ; } return p; } int main() { char str1[] = "abcdefg"; char str2[20]="abc"; printf("%s", my_strcat(str2, str1)); return 0; }
strcmp函數是字符串比較函數,如果str1比str2大就返回正值,str1比str2小返回負值。str1=str2比較下一對字符。只要有一個遇見\0就停止。
官方解釋如圖
模擬實現
#include <stdio.h> int my_strcmp( const char* str1,const char* str2) { while (*str1++-*str2++==0 && *str1!='\0' && str2!='\0') { ; } return *--str1 - *--str2; } int main() { char str1[] = "abcdefg"; char str2[] = "bbcdef"; int a=my_strcmp(str1,str2); printf("%d", a); return 0; }
strncpy函數是長度受限制的字符串拷貝函數,可以指定拷貝多少給字節,當給定的字節數大于要拷貝的字符串時,不夠的用\0補充。
官方解釋
模擬實現
#include <stdio.h> char* my_strncpy(char* dest,const char* sour,int num) { char* p = dest; while (num--) { if (*sour != '\0') { *dest++ = *sour++; } else { *dest++ = '\0'; } } return p; } int main() { char sur[] = "abcdefg"; char dest[10] = { 0 }; printf("%s", my_strncpy(dest, sur,10)); return 0; }
strncat函數,需要注意的一點是,字符串追加完成后目的地址斜杠零是追加完后自己補充的。所以它可以實現自己給自己 追加。
官方解釋
模擬實現
#include <stdio.h> char* my_strncat(char* str2,const char* str1,size_t num) { char* p = str2; while (*str2++){ ; } str2--; while (num--) { if (*str1 != '\0') { *str2++ = *str1++; } } *str2 = '\0'; return p; } int main() { char str1[] = "abcdefg"; char str2[20]="abc"; printf("%s", my_strncat(str2, str1,6)); return 0; }
strncmp函數,比較字符串,和strcmp類似只是可以確定比較前幾個字符。
官方解釋
模擬實現
#include <stdio.h> int my_strncmp( const char* str1,const char* str2,size_t num){ while (num--&& *str1++-*str2++==0 && *str1!='\0'&& str2!='\0') { ; } return (*--str1 - *--str2); } int main() { char str1[] = "abcdefg"; char str2[] = "bbcdef"; int a=my_strncmp(str1,str2,5); printf("%d", a); return 0; }
strstr函數就是在一個字符串里找子字符串。
官方解釋
模擬實現
#include <stdio.h> const char* my_strstr(const char* str1, const char* str2) { while (*str1) { const char* p1 = str1; const char* p2 = str2; while (*p1++ == *p2++) { ; } if (*--p2 == '\0') { break; } else { str1++; } } return str1; } int main() { char str1[] = "abbbcdefg"; char str2[] = "bcde"; int len = strlen(str2); const char* p = my_strstr(str1, str2); while (len--) { printf("%c", *p++); } return 0; }
strtok函數是字符串切割函數,用的比較少也比較難懂。用的是時候要給一個用做分隔符的字符集合。strtok函數找到分隔符后將其置為0.返回一個指向該標記的指針。如果第一個參數不為空則strtok找到第一個分隔符將其置零并記錄該處地址,第二次調用strtok則傳一個NULL則strtok會從前一個'\0‘處往后找下一個分隔符。
官方解釋
模擬實現
#include <string.h> #include <stdio.h> char* my_strtok(char* str, char* demion) { static char* p_last = NULL; if (str == NULL && (str = p_last) == NULL) { return NULL; } char* s = str; char* t = NULL; while (*s != '\0') { t = demion; while (*t != '\0') { if (*s == *t) { p_last = s + 1; if (s - str == NULL) { str = p_last; break; } *s = '\0'; return str; } t++; } s++; } return NULL; } int main(void) { char str[] = "liusen,lin,lll"; char* result = NULL; result = my_strtok(str, ","); printf("%s\n", result); result = my_strtok(NULL, ","); printf("%s\n", result); return 0; }
上述就是小編為大家分享的如何用C語言模擬實現字符串函數了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。