保姆级讲解字符串函数(下篇)

简介: 保姆级讲解字符串函数(下篇)

接上篇:保姆级讲解字符串函数(上篇),我们接着把剩下三个函数讲解完,继续跟着我的步伐一起学习呀.


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循环讲解

目录
相关文章
|
1天前
保姆级讲解字符串函数(上篇)
保姆级讲解字符串函数(上篇)
6 1
|
5月前
|
编译器 C++
(保姆级)函数进阶内容以及静态库的基础知识
(保姆级)函数进阶内容以及静态库的基础知识
50 5
|
5月前
|
编译器 C语言
(保姆级)一篇帮你搞懂循环语句
(保姆级)一篇帮你搞懂循环语句
83 0
|
10月前
|
存储 编译器 C语言
C语言数据存储深度剖析(保姆级别教学,超级详细,干货满满)
C语言数据存储深度剖析(保姆级别教学,超级详细,干货满满)
|
存储 缓存 C语言
初级C语言之【循环语句】(保姆级教程)(一)
初级C语言之【循环语句】(保姆级教程)(一)
122 0
|
C语言
初级C语言之【循环语句】(保姆级教程)(二)
初级C语言之【循环语句】(保姆级教程)(二)
192 0
|
存储 算法 编译器
【C语言深度剖析】— 史上最全关键字(爆肝半个月、数万字详解、考试必备)(2)
【C语言深度剖析】— 史上最全关键字(爆肝半个月、数万字详解、考试必备)(2)
129 0
【C语言深度剖析】— 史上最全关键字(爆肝半个月、数万字详解、考试必备)(2)
|
存储 网络协议 编译器
【C语言深度剖析】— 史上最全关键字(爆肝半个月、数万字详解、考试必备)(3)
【C语言深度剖析】— 史上最全关键字(爆肝半个月、数万字详解、考试必备)(3)
【C语言深度剖析】— 史上最全关键字(爆肝半个月、数万字详解、考试必备)(3)
|
存储 缓存 安全
【C语言深度剖析】— 史上最全关键字(爆肝半个月、数万字详解、考试必备)(1)
【C语言深度剖析】— 史上最全关键字(爆肝半个月、数万字详解、考试必备)(1)
171 0
【C语言深度剖析】— 史上最全关键字(爆肝半个月、数万字详解、考试必备)(1)