1.strlen:
strlen - C++ Reference
strlen
函數是一個標準庫函數,用于計算以 null 結尾的字符串的長度,也就是字符串中實際字符的數量,不包括最后的 null 終止符 \0
。它定義在 <string.h>
頭文件中。
函數原型:size_t strlen(const char *str);
參數:str
:指向以 null 結尾的字符串的指針。
返回值:返回一個?size_t
?類型的值,表示字符串?str
?中的字符數,不包括結尾的 null 字符。
使用示例:
模擬其實現代碼如下:
size_t my_strlen1(const char *str) {int count = 0;assert(str != NULL);while (*str++) {count++;}return count;
}
size_t my_strlen2(const char* str) {assert(str != NULL);if (*str != '\0') {return 1 + my_strlen2(str+1);}else {return 0;}
}
size_t my_strlen3(const char* str) {assert(str != NULL);char* start = str;while (*str) {str++;}return str - start;
}
2.strcpy
strcpy - C++ Reference
函數原型:char *strcpy(char *dest, const char *src);
參數:dest
:目標字符串的指針,它是一個指向足夠大的字符數組或者字符指針,用于存儲復制后的字符串。src
:源字符串的指針,是一個指向以 null 結尾的字符串的指針,將被復制到目標字符串中。
返回值:返回指向目標字符串?dest
?的指針,即復制后的字符串的起始地址。
使用示例:
模擬其實現代碼如下:
char* my_strcpy(char* dest, const char* str) {char* ret = dest;assert(str && dest);while (*dest++ = *str++) {;}return ret;
}
注意事項:
-
目標字符串必須足夠大:
dest
指向的內存空間必須足夠大,能夠容納src
指向的字符串及其結尾的 null 字符。否則可能會導致緩沖區溢出,產生未定義的行為。 -
null 結尾符:
strcpy
函數會復制src
指向的字符串直到遇到 null 結尾符為止。因此,復制的結果將會包括 null 結尾符。 -
安全性:使用
strcpy
函數時,應確保src
指向的字符串確實以 null 結尾,否則可能會導致未定義的行為。
3.strcat
strcat - C++ Reference
strcat
函數用于將一個字符串追加到另一個字符串的末尾。它同樣定義在 <string.h>
頭文件中。
函數原型:char *strcat(char *dest, const char *src);
參數dest
:目標字符串的指針,是一個以 null 結尾的字符數組或者字符指針,將被用作目標。
src
:源字符串的指針,是一個以 null 結尾的字符數組或者字符指針,將被追加到目標字符串的末尾。
返回值:返回指向目標字符串?dest
?的指針,即追加后的字符串的起始地址。
使用示例:
模擬其實現代碼如下:
char* my_strcat(char* dest, const char* str) {assert(str&&dest);char* ret = dest;while (*dest) {dest++;}while (*dest++=*str++) {;}return ret;
}
注意事項
-
目標字符串必須足夠大:與
strcpy
類似,dest
指向的內存空間必須足夠大,能夠容納src
指向的字符串及其結尾的 null 字符。否則可能會導致緩沖區溢出,產生未定義的行為。 -
null 結尾符:
strcat
函數會在目標字符串dest
的結尾 null 字符的位置開始追加src
指向的字符串。因此,追加后的結果仍然以 null 結尾。 -
安全性:使用
strcat
函數時,應確保dest
指向的目標字符串足夠大,且確保src
指向的字符串以 null 結尾
4.strcmp
strcmp - C++ Reference
strcmp
函數是用于比較兩個字符串的內容是否相同。它同樣定義在 <string.h>
頭文件中。
函數原型:int strcmp(const char *str1, const char *str2);
參數:str1
:要比較的第一個字符串的指針。str2
:要比較的第二個字符串的指針。
返回值:如果?str1
?和?str2
?的內容相同,則返回值為 0。如果?str1
?的內容大于?str2
?的內容,則返回正值。如果?str1
?的內容小于?str2
?的內容,則返回負值。
使用示例:
模擬其實現代碼如下:
int my_strcmp(const char* str1, const char* str2) {assert(str1 && str2);while (*str1 == *str2) {str1++;str2++;}if (*str1 == "\0") {return 0;}return *str1 - *str2;
}
注意事項
-
null 結尾符:
strcmp
函數會比較str1
和str2
指向的字符串,直到遇到 null 結尾符為止。 -
大小寫敏感:
strcmp
是區分大小寫的,即大寫字母和小寫字母被視為不同的字符。 -
安全性:使用
strcmp
函數時,應確保str1
和str2
都是以 null 結尾的有效字符串,否則可能會導致未定義的行為。
5.strstr
strstr - C++ Reference
strstr
函數用于在一個字符串中搜索指定子字符串的第一次出現,并返回一個指向該子字符串的指針。它同樣定義在 <string.h>
頭文件中。
函數原型:char *strstr(const char *haystack, const char *needle);
參數:haystack
:要搜索的主字符串,即被搜索的字符串。needle
:要查找的子字符串,即要搜索的目標字符串。
返回值:如果?needle
?存在于?haystack
?中,則返回一個指向?needle
?在?haystack
?中第一次出現的位置的指針。如果?needle
?不存在于?haystack
?中,則返回?NULL
。
使用示例:
模擬其實現代碼如下:
char* my_strstr(const char*str1, const char* str2) {assert(str1 && str2);const char* s1 = str1;const char* s2 = str2;const char* p = str1;while(*p){s1 = p;s2 = str2;while (*s1 == *s2 && str1!='\0' && str2!='\0') {s1++;s2++;} if (*s2 == '\0') {return p;}p++;}return NULL;
}
注意事項
-
大小寫敏感:
strstr
函數是區分大小寫的,即大寫字母和小寫字母被視為不同的字符。 -
空字符串:如果
needle
是一個空字符串 (""
),則strstr
函數將返回haystack
的起始地址,因為任何字符串都包含空字符串。 -
安全性:確保
haystack
和needle
都是以 null 結尾的有效字符串。