目录
1、strlen
- 作用:计算字符串的长度,即不包括空字符的字符数。
- 函数接口:
size_t strlen(const char* str)
- 参数描述:接受一个指向以空字符结尾的字符串的指针
str
。- 返回值:返回字符串的长度,即字符数。
模拟实现strlen:
int my_strlen(const char* str) { assert(str != NULL); if (*str=='\0') return 0; return 1 + my_strlen(str + 1); }
2、strcpy
- 作用:将一个字符串复制到另一个字符串中。
- 函数接口:
char* strcpy(char* destination, const char* source)
- 参数描述:接受一个指向目标字符串的指针
destination
和一个指向源字符串的指针source
。- 返回值:返回指向目标字符串的指针。
模拟实现strcpy:
char* my_strcpy( char* str1,const char* str2) { char* str = str1; assert(str1 != NULL); assert(str2 != NULL); while (*str1 = *str2) { str1++; str2++; } return str; }
3、strncpy
- 作用:将一个字符串的指定长度复制到另一个字符串中。如果源字符串长度不足,则使用空字符填充。
- 函数接口:
char* strncpy(char* destination, const char* source, size_t num)
- 参数描述:接受一个指向目标字符串的指针
destination
,一个指向源字符串的指针source
,以及要复制的字符数num
。- 返回值:返回指向目标字符串的指针。
模拟实现strncpy:
char* my_strncpy(char* str1, const char* str2, size_t num) { char* str = str1; assert(str1 != NULL); assert(str2 != NULL); while (num--) { *str1++ = *str2++; } return str; }
4、strcmp
- 作用:比较两个字符串是否相等。
- 函数接口:
int strcmp(const char* str1, const char* str2)
- 参数描述:接受两个指向要比较的字符串的指针
str1
和str2
。- 返回值:如果字符串相等,则返回 0;如果
str1
小于str2
,则返回一个负值;如果str1
大于str2
,则返回一个正值。模拟实现strcmp:
int my_strcmp(const char* str1,const char* str2) { assert(str1!=NULL); assert(str2!=NULL); while (*str1 == *str2&&*str1) { str1++; str2++; } return *str1 - *str2; }
5、strncmp
- 作用:比较两个字符串的前 n 个字符是否相等。
- 函数接口:
int strncmp(const char* str1, const char* str2, size_t num)
- 参数描述:接受两个指向要比较的字符串的指针
str1
和str2
,以及要比较的字符数num
。- 返回值:如果前
num
个字符相等,则返回 0;如果str1
小于str2
,则返回一个负值;如果str1
大于str2
,则返回一个正值。模拟实现strncmp:
int my_strncmp(const char* str1,const char* str2, size_t num) { assert(str1!=NULL); assert(str2!=NULL); while (*str1 == *str2 && *str1 && --num) { str1++; str2++; } return *str1 - *str2; }
6、strcat
- 作用:将一个字符串连接到另一个字符串的末尾。
- 函数接口:
char* strcat(char* destination, const char* source)
- 参数描述:接受一个指向目标字符串的指针
destination
和一个指向源字符串的指针source
。- 返回值:返回指向目标字符串的指针,即连接后的字符串。
模拟实现strcat:
char* my_strcat(char* str1, const char* str2) { char* str = str1; assert(str1 != NULL); assert(str2 != NULL); while (*str1) { str1++; } while (*str1 = *str2) { str1++; str2++; } return str; }
7、strncat
- 作用:将一个字符串的指定长度连接到另一个字符串的末尾。
- 函数接口:
char* strncat(char* destination, const char* source, size_t num)
- 参数描述:接受一个指向目标字符串的指针
destination
,一个指向源字符串的指针source
,以及要连接的字符数num
。- 返回值:返回指向目标字符串的指针,即连接后的字符串。
模拟实现strncat:
char* my_strncat(char* str1, const char* str2, size_t num) { char* str = str1; assert(str1 != NULL); assert(str2 != NULL); while (*str1) { str1++; } while (*str2 && num--) { *str1 = *str2; str1++; str2++; } *str1 = '\0'; return str; }
8、strstr
- 作用:在一个字符串中搜索子字符串的第一次出现。
- 函数接口:
char* strstr(const char* str1, const char* str2)
- 参数描述:接受两个指向要搜索的字符串的指针
str1
和str2
。- 返回值:如果
str2
是str1
的子字符串,返回第一次出现的位置的指针;如果未找到,则返回 NULL。模拟实现strstr:
char* my_strstr(const char* str1, const char* str2) { char* str = (char*)str1; char* s1 = NULL; char* s2 = NULL; assert(str1 != NULL); assert(str2 != NULL); while (*str) { s1 = str; s2 = (char*)str2; while (*s1 == *s2&&*s1&&*s2) { s1++; s2++; } if (*s2 == '\0') { return str; } str++; } return NULL; }
strtok和strerror函数仅作了解:
9、strtok
- 作用:将一个字符串分割为多个子字符串,利用分隔符进行分割。
- 函数接口:
char* strtok(char* str, const char* delimiters)
- 参数描述:接受一个指向要分割的字符串的指针
str
,以及包含分隔符的字符串delimiters
。- 返回值:如果找到了下一个分割出的子字符串,返回其指针;如果已经没有更多子字符串,则返回 NULL。注意,第一次调用时需要将
str
传入,后续调用只需要将str
参数设为 NULL。strtok函数的使用:
#include <stdio.h> #include <string.h> int main () { char str[] ="- This, a sample string."; char * pch; printf ("Splitting string \"%s\" into tokens:\n",str); pch = strtok (str," ,.-"); while (pch != NULL) { printf ("%s\n",pch); pch = strtok (NULL, " ,.-"); } return 0; }
10、strerror
- 作用:返回指定错误代码对应的错误消息字符串。
- 函数接口:
char* strerror(int errnum)
- 参数描述:接受一个整型参数
errnum
,表示错误代码。- 返回值:返回表示错误代码
errnum
的错误消息字符串。
——————————————如有错误,欢迎大家指正。 ————————————————