目录
- strstr函数
-
-
- 描述
- 声明
- 参数
- 返回值
- 使用
- 模拟实现
-
- strtok函数
-
- 描述
- 声明
- 返回值
- 使用
- strerror
strstr函数
描述
C 库函数 char *strstr(const char *haystack, const char *needle) 在字符串 haystack 中查找第一次出现字符串 needle 的位置,不包含终止符 ‘\0’。
声明
char *strstr(const char *haystack, const char *needle)
参数
haystack – 要被检索的 C 字符串。
needle – 在 haystack 字符串内要搜索的小字符串。
返回值
该函数返回在 haystack 中第一次出现 needle 字符串的位置,如果未找到则返回 null。
使用
int main()
{
char *p1 = "abcdefgddddddddrrrr";char *p2 = "ddddd";char* ret = strstr(p1, p2);if (ret == NULL){
printf("不存在");}else{
printf("%s\n", ret);}return 0;
}
模拟实现
#include <stdio.h>
#include <assert.h>
char* my_strstr(char*p1, char*p2)
{
assert(p1 != NULL);assert(p2 != NULL);char*s1 = p1;char*s2 = p2;char*s3 = p1;while (*s3){
s1 = s3;s2 = p2;while ((*s1 != '\0') && (s2 != '\0') && (*s1 == *s2)){
s1++;s2++;}if (*s2 == 0){
return s3;}s3++;}return NULL;
}
int main()
{
char *p1 = "abcdefgh";char *p2 = "def";char* ret = my_strstr(p1, p2);if (ret == NULL){
printf("不存在\n");}else{
printf("%s\n", ret);}return 0;
}
strtok函数
描述
1.分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符(如果传入字符串,则传入的字符串中每个字符均为分割符)。首次调用时,s指向要分解的字符串,之后再次调用要把s设成NULL。
2.第一个参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或者多个分隔符分割的标记。
3.strtok函数找到str中的下一个标记,并将其用 \0 结尾,返回一个指向这个标记的指针。(注:strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容并且可修改。)
4.strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置。
5strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标记。
如果字符串中不存在更多的标记,则返回 NULL 指针。
声明
char *strtok(char s[], const char *delim);
返回值
从s开头开始的一个个被分割的串。当s中的字符查找到末尾时,返回NULL。
如果查找不到delim中的字符时,返回当前strtok的字符串的指针。
使用
int main()
{
char arr[] = "wyp@qq.com";char *p = "@.";char buf[1024] = {
0 };strcpy(buf, arr);char*ret = NULL;for (ret = strtok(arr, p); ret != NULL; ret = strtok(NULL, p)){
printf("%s\n", ret);}return 0;
}
strerror
char * strerror ( int errnum );
strerror
返回错误码,所对应的错误信息。
/* strerror example : error list */
#include <stdio.h>
#include <string.h>
#include <errno.h>//必须包含的头文件