1.strstr函数功能及其实现
char* mystrstr(char* str1, char* str2) { char* cp = str1; char* s1 = str1; char* s2 = str2; if (*str1 = '\0') { return str1; } while (*s1 && *s2 && *s1 == *s2) { s1++; s2++; } if (*s2 = '\0') { return cp; } cp++; } int main() { char arr1[20] = "abfghhjkoljhgf"; char arr2[] = "hjk"; char* ret = mystrstr(arr1, arr2); if (ret != NULL) { printf("%s\n", ret); } else { printf("没找到\n"); } return 0; }
(1)这个函数的主要找到一个字符串在另外的一个字符串里面出现的位置;
(2)拿这里的两个字符串举例子,这个显然是让这个指针不断地向后移动,因为arr2是3个字符,
当第一个相同的时候就会进入循环,但是第二个字符就不相同了,这个时候的指针肯定要回到初始
的位置,所以我们定义了指针cp用来记录这个初始位置,当我们的s1发现不相同的时候,就会重新
返回cp的位置;
(3)循环条件里面要求s1s2解引用后不能是斜杠0,这样就可以当找到斜杠0的时候退出循环;
(4)当arr2指针找到斜杠0的时候,说明这个字符串啊已经找到了,就返回cp的位置就可以进行打
印了;
(5)自定义函数里的第一个if语句是当这个arr2是斜杠0的时候,直接返回str1的地址,打印arr1;
2.strtok函数功能
int main() { char arr[40] = "nanlaibeiwang@wangxin@mayan.makui"; char copy[40]; strcpy(copy, arr); char* ret = NULL; char sep[] = "@@."; for (ret = strtok(copy, sep); ret != NULL; ret = strtok(NULL, sep)) { printf("%s\n", ret); } return 0; }
(1)这个函数主要是分割字符串,需要我们给出特殊的符号作为分割的位置;
(2)这个例子里面我们把”@@."作为分割位置,就可以分别打印分割后的4部分字符串;
(3)因为分割时进行修改,所以我们进行了拷贝,保留原来的字符串;
(4)这个函数在使用的时候,第一次给他字符串初始地址,他找到特殊的字符就会停下来了,然
后从第二次开始,我们就只用传递空指针,因为这个函数可以自己记住第一个特殊字符的位置,
然后第二次就直接从第一次的特殊字符处开始打印,以此类推;只要不是空指针就会一直进行
3.strerror函数功能
通过这个例子也可以看到,这个函数主要是把错误码转换成错误信息,方便程序员进行理解;
4.isupper,tolower,toupper函数
#include<string.h> int main() { char arr[20] = { 0 }; gets(arr); char* p = arr; while (*p) { if (isupper(*p)) { *p = tolower(*p); } p++; } printf("%s\n", arr); return 0; }
isupper这个函数就是判断一串输入字符是否是大写的;
tolower,toupper是把大写转化为小写,或者是小写转化为大写;
这段代码实现的就是把输入的字符串转化为全小写的。