接上篇:保姆级讲解字符串函数(上篇),我们接着把剩下三个函数讲解完,继续跟着我的步伐一起学习呀.
strtok的使用
函数模型:char* strtok(char* str ,const char* sep)
#include<stdio.h> #include<string.h> int main() { char ch1[] = "baizihuan@qq.com"; char ch2[50] = { 0 }; strcpy(ch2, ch1); //strcpy拷贝,将ch1的字符串拷贝到ch2,是因为strtok函数会改变被操作字符串,所以要保留原本字符串的内容 char* p = "@."; //定义用作分隔字符的集合:“@.” char* s = NULL; for (s = strtok(ch2, p); s != NULL; s = strtok(NULL, p)) { printf("%s\n", s); } return 0; }
那这个strtok有什么作用呢?,我们先看控制台输出显示
给出一个字符串,自定义分隔字符串
代码的for循环解释:
strerror的使用
1.函数原型:char* strerror(int errnum)
2.包含头文件:#include<errno.h>
#include<errno.h> int main() { int i = 0; for (i = 0; i < 10; i++) { printf("%d : %s\n", i, strerror(i)); } return 0; }
控制台输出显示:
注:
1.C语⾔程序启动的时候就会使⽤⼀个全⾯的变量errno来记录程序的当前错误码,只不过程序启动的时候errno是0,表示没有错误;
2.当我们在使⽤标准库中的函数的时候发⽣了某种错误,就会讲对应的错误码,存放在errno中,⽽⼀个错误码的数字是整数很难理解是什么意思,所以每⼀个错误码都是有对应的错误信息的。
3.strerror函数就可以将错误对应的错误信息字符串的地址返回。
关于输出在也可以了解perror函数,我会在接下来的文件操作会讲到
strstr的使用和函数模拟实现
strstr的使用
函数原型:char* strstr(const char* str1,const char* str2)
作用:函数返回字符串str2在字符串str1中第一次出现的位置
int main() { char str1[] = "abcdefg"; char str2[] = "bcd"; char* ret = strstr(str1, str2); if (ret != NULL) printf("%s\n", ret); else printf("找不到\n"); return 0; }
控制台显示输出 :bcdefg
strstr函数模拟实现
char* my_strstr(const char* s1, const char* s2) { const char* p = s1; //用指针标记字符串s1的初始位置 const char* a1 = NULL; const char* a2 = NULL; assert(s1 && s2); //保证指针的有效性 if (*s2 == '\0') return (char*)s1; //如果s2解引用是'\0',返回s1 while (*p) { a1 = p; a2 = s2; while (*a1 && *a2 && *a1 == *a2) { a1++; a2++; } if (*a2 == '\0') { return (char*)p; } p++; } return NULL; //如果找不到,返回NULL指针 } int main() { char str1[] = "abcdefg"; char str2[] = "bbcdefg"; char* ret = my_strstr(str1, str2); if (ret != NULL) printf("%s\n", ret); else printf("找不到\n"); return 0; }
控制台输出:找不到
函数代码中while循环讲解