函数和strtok函数"/>
strstr函数和strtok函数
文章目录
- strstr函数
- 函数使用
- 函数模拟实现
- strtok函数
strstr函数
参数为两个字符串的地址,在str1中找str2不包括结束符。
函数使用
#include<stdio.h>
#include<string.h>int main()
{char* str1 = "abcdeffgmnlo";char* str2 = "de";char str3[] = "fg";char* pc1 = strstr(str1, str2);printf("%s\n", pc1);char* pc2 = strstr(str1, str3);printf("%s\n", pc2);char* pc3 = strstr(str1, "mmm");printf("%s\n", pc3);return 0;
}
函数返回值为在主串中找到的子串首元素地址
打印时以这个地址开始打印找到结束字符停止打印
函数模拟实现
#include<stdio.h>
#include<assert.h>const char* my_strstr(const char* str1, const char* str2)
{assert(str1 && str2);if (*str2 == '\0'){return str1;}const char* cp1 = NULL;const char* cp2 = NULL;const char* pmove = str1;while (pmove != '\0'){cp1 = pmove;cp2 = str2;while (*cp1 == *cp2 && *cp1 != '\0' && *cp2 != '\0'){cp1++;cp2++;}if (*cp2 == '\0'){return pmove;}pmove++;}return NULL;
}int main()
{char* str1 = "abcddefg";char* str2 = "de";char* ret = my_strstr(str1, str2);if (ret == NULL){printf("找不到");}else{printf("%s\n", ret);}return 0;
}
这个函数的模拟实现可以很好的锻炼你的思维,多想多上手。
strtok函数
作用:将一个字符串分割成多个字符串
#include <stdio.h>
#include <string.h>int main()
{char arr[] = "zhangsan@qq";char* p = "@.";char buf[20] = { 0 };strcpy(buf, arr);char* ret = strtok(buf, p);printf("%s\n", ret);ret = strtok(NULL, p);printf("%s\n", ret);ret = strtok(NULL, p);printf("%s\n", ret);return 0;
}
这里的@和.为分隔符,在调用strtok函数时会把这两个分隔符转换为‘\0’,并返回分隔符之前的字符串首地址,在第二次调用时要传空指针过去,才能返回第二个字符串的首地址,这里为什么要把arr赋给buf这个新数组?因为strtok调用后会改变原字符串。如果字符串中不存在更多的标记,则返回 NULL 指针。
代码改进:
#include <stdio.h>
#include <string.h>int main()
{char arr[] = "zhangsan@qq";char* p = "@.";char buf[20] = { 0 };strcpy(buf, arr);char* ret = NULL;for (ret = strtok(buf, p); ret != NULL;ret = strtok(NULL,p)){printf("%s\n", ret);}return 0;
}
更多推荐
strstr函数和strtok函数
发布评论