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 结尾的有效字符串。