1.strlen函数
strlen函数的作用是求字符串的长度,即\0之前字符的个数。
strlen的函数原型为:
(更多函数细节 请关注cplusplus.com - The C++ Resources Network网址。)
size_t strlen ( const char * str );
strlen函数注意事项:
1.字符串以’\0’作为结束标志,strlen函数返回的是在字符串中‘\0’前面出现的的字符个数(不包含‘\0’)。
2.参数指向的字符串必须要以‘\0’结束。
3.注意函数的返回值为size_t,是无符号的。
模拟实现有如下三种方法:
1.计数器方式
int my_strlen(char *str) { int count = 0;//计数器 while (*str) { count++; str++; } return count; }
2.递归
int my_strlen(char* str) { if (*str) { return 1 + my_strlen(str + 1); } else return 0; }
3.指针-指针
int my_strlen(char* str)//指针减去指针的方法 { char* start = str; while (*str) { str++; } return str - start; }
2.strcpy函数
strcpy函数的作用是:将源字符串copy到目的字符串。
strcpy函数原型为:
char * strcpy ( char * destination, const char * source );
strcpy函数的注意事项:
1.源字符串必须以‘\0’结束。
2.会将源字符串的‘\0’拷贝到目标空间。
3.目标空间必须足够大,以确保能存放源字符串。
4.目标空间必须可变。(不能是字符串)
模拟实现如下:
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<assert.h> char *my_strcpy(char* dest, const char* src) { char* ret = dest; assert(dest && src); while (*dest++ = *src++) ; return ret; } int main() { char arr1[20] = { 0 }; char arr2[] = "abcdef"; printf("%s\n", my_strcpy(arr1, arr2)); return 0; }
3.strcmp函数
strcmp函数的作用是比较两个字符串的大小(ASCII码值)。
strcmp函数原型为:
int strcmp ( const char * str1, const char * str2 );
strcmp函数 标准规定:
1.第一个字符串大于第二个字符串,则返回大于0的数字。
2.第一个字符串小于第二个字符串,则返回小于0的数字。
3.第一个字符串等于第二个字符串,则返回0。
模拟实现如下:
int my_strcmp(const char* str1, const char* str2) { assert(str1 && str2); while (*str1 == *str2) { if (*str1 == '\0') return 0; str1++; str2++; } if (*str1 > *str2) return 1; else return -1; return 0; /*while (*str1 == *str2)//这里用了两种 任选其一即可 { if (*str1 == '\0') return 0; str1++; str2++; } return *str1 - *str2;*/ }
4.strcat函数
strcat函数的作用的追加字符串,将str2字符串追加到str1之后。
strcat函数原型为:
char * strcat ( char * destination, const char * source );
strcat函数的注意事项:
1.源字符串必须以‘\0’结束。
2.目标空间必须足够大,能容纳下源字符串的内容。
3.目标空间必须可修改。
模拟实现如下:
char* my_strcat(char* dest, const char* src) { char* ret = dest;//ret指向目标数组的首地址 便于返回 assert(dest && src); while (*dest) dest++; while (*dest++=*src++) { ; } return ret; }
5.strstr函数
strstr函数的作用:是在str1字符串中找str2字符串。
strstr函数原型为:
const char * strstr ( const char * str1, const char * str2 );
模拟实现如下:
char* my_strstr(const char* str1, const char* str2) { //const char* cp;记录开始匹配的位置 //const char* s1;遍历str1指向的字符串 //const char* s2;遍历str2指向的字符串 assert(str1 && str2); const char* cp = str1; if (*str2 == '\0')//若str2指针为空,直接返回str1 return str1; while (*cp) { const char* s1 = cp; const char* s2 = str2; while (s1&&s2&&*s1 == *s2) { s1++; s2++; } if (*s2 == '\0') return cp; cp++; } return NULL; }
6.strtok函数
strtok函数的作用:切割字符串。
strtok的函数原型:
char * strtok ( char * str, const char * delimiters );
strtok函数注意事项:
1.sep参数是个字符串,定义了做分隔符的字符集合。
2.第一个参数指定一个字符串,它包含 0个或多个由sep字符串中一个或多个分隔符分割的标记。
3.strtok函数找到str中的下一个标记,并将其用‘\0’结尾,返回一个指向这个标记的指针。(注意:strtok函数会改变被操作的字符串,所以在使用strtok函数切割的字符串一般都是临时拷贝的内容并且可以修改)。
4.strtok函数的第一个参数不为NULL,函数找到str中的第一个标记,strtok函数将保存他在字符串中的位置。
5.strtok函数的第一个参数不为NULL,函数将在同一字符串中被保存的位置开始,查找下一个标记。
6.如果字符串中不存在更多的标记,则返回NULL指针。
for(str=strtok(arr,sep);str!=NULL;str=strtok(NULL,sep) {}
这里使用了一个for循环来切割arr数组,sep中存放的是分隔符的集合。
strtok函数除了初始时第一个参数是要被切割的字符串,之后的第一个参数都为NULL。
7.strerror函数
strerror函数的作用:将错误码翻译成错误信息,返回错误信息的字符串的起始地址。
补充:c语言中使用库函数的时候,如果发生错误,就会将错误码放在errno的变量中。
errno是个全局变量,可以直接使用。
strerror函数原型:
char * strerror ( int errnum );
使用:
strerror(errno);