目录
我们知道,除了一般常见的字符串拷贝,比较,追加之外,还有一些字符串函数,我们应该知道的,比如strstr查找字符串函数,strtok字符串分隔函数,strerror返回错误信息函数。本文我们将一一求解。
一,strstr查找字符串函数
1.1基本功能概述
该函数的作用,就是在一个字符串中查找我们所需的字符串是否存在,所以接下来我们将其如何进行查找以及该函数的基本格式一一进行解读。
根据其基本格式,我们可以看出,因为两个指针只是用来比较,不改变其内容,所以我们将其均用 const 修饰。最后返回一个指针,如果找到了,则返回要查的字符串 str2 第一次出现的地方的地址,然后将其以及后面的内容全部打印出来。如果没找到,返回空指针即可。
1.2模拟实现代码
好的,接下来我们用模拟实现来仔细分析该函数的执行过程。
#include<stdio.h>
#include<string.h>
char* my_strstr(const char* str1, const char* str2)
{
char* s1;
char* s2;
char* cp = str1;
if (*str2 == '\0')//这种情况为要查找的字符串为空,
//这里可以随意选择返回值,只要能表达清楚意思即可
return str1;
while (*cp )
{
s1 = cp;
s2 = str2;
while (*s1 == *s2 && *s1 != '\0' && *s2 != '\0')
{
s1++;
s2++;
}
if (*s2 == '\0')
{
return cp;
}
cp++;
}
return NULL;
}
int main()
{
char arr1[] = {"helloabc"};
char arr2[] = {"abc"};
//原型实现:
//printf("%s", strstr(arr1, arr2));
//模拟实现
char *ret = my_strstr(arr1,arr2); //会有警告,但是无伤大雅
printf("%s",ret);
return 0;
}
好的,如上代码所示。简单分析,可知,当要查找的字符串为空时,这种情况一般是不会有的,但是如果有的话,我们可以将其返回一个自己认为可以标注这种情况的指针,来解释这种情况。
1.3模拟实现过程
那么接下来我们来了解正常情况下,strstr函数的功能。。
然后,当 s1 和 s2 指针比较时,如果相等,则两个一起移位,然后再比较。这是最基础的做法。
而一旦当两者不相等时,说明s1所处的位置不可能查找到要查找的字符串,所以将 cp 指针往后移动一位,然后再将 cp 的位置赋给 s1,与此同时,s2也应该回到原点,重新开始比较。即如图所示:
好的,经过以上过程之后呢,我们其实还需要注意的是,返回值的问题,也即我们最终的大循环,如果找到了,因为此时cp指针保存的是找到的这次循环 s1 指针起始的位置,所以将其返回,如果找不到,则返回空指针,表示找不到。
二,strtok字符串分隔函数
2.1基本内容
好的,接下来我们来了解一下字符串分隔函数strtok。
根据基本格式,我们需要知道的是:
2.2具体实现
#include <stdio.h>
#include <string.h>
int main()
{
char str[] = "abc@def.ad.d" ;
const char sep[] = "@.";
char p[20];
strcpy(p,str);
char* ret = NULL;
for (ret = strtok(p, sep); ret != NULL; ret = strtok(NULL, sep))
{
printf("%s\n",ret);
}
return 0;
}
这里主要需要分析也就是for循环里面的具体实现:
最后将其打印出来,可以看到我们将字符串分隔为了好几部分。如图所示:
三,strerror返回错误信息函数
我们知道,当代吗错误时,会反馈给我们一个错误信息,那么strerror函数就是通过错误码找到错误信息,然后返回给用户。
基本功能:返回错误码对应的错误信息
函数实现:如下代码所示:
前两行目的是打开文件,但是这个文件在这里明显是不存在的,所以 strerror函数会将errno返回的错误码变成对应的错误信息,然后显示出来。
当然这里还有另外一个函数 perror ,该函数会在返回错误信息的同时,将其打印在屏幕上。
#include<stdio.h>
#include<errno.h>
#include<string.h>
int main()
{
FILE* pFile;
pFile = fopen("unexist.ent", "r");
//errno - 存放错误码
//strerror(erron) 将错误码转换成错误信息
if (pFile == NULL)
printf("%s\n", strerror(errno));//手动打印错误码对应的错误信息,
//perror("打印");//perror函数功能:自动打印+返回错误信息
return 0;
}
好的,本文到此就结束啦,如有错误,还请各位指正哦!