目录
一、strstr
strstr函数可以在cplusplus中查到,strstr - C++ Reference (cplusplus.com)
函数原型如下:
const char * strstr ( const char * str1, const char * str2 );
char * strstr ( char * str1, const char * str2 );
函数介绍如下:
返回值和使用案例:
strstr函数功能就是返回str2在str1中第一次出现的位置,如果str2没有在str1中出现,就返回NULL
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[] = "hello CILMY23";
char arr2[] = "C";
char* ret = strstr(arr1, arr2);
if (ret != NULL)
printf("%s \n", ret);
else
printf("找不到\n");
ret = strstr(arr2, arr1);
if (ret != NULL)
printf("%s \n", ret);
else
printf("找不到\n");
return 0;
}
结果如下:
为了检验自己写的是否对不对,我们拿出几组的测试用例
void Judge(char* p)
{
if (p != NULL)
printf("%s \n", p);
else
printf("找不到\n");
}
int main()
{
char arr1[] = "hello CILMY23";
char arr2[] = "C";
char arr3[] = "lllC";
char arr4[] = "This is a simple string";
char arr5[] = "";
char* ret = strstr(arr1, arr2);
Judge(ret);
ret = strstr(arr2, arr1);
Judge(ret);
ret = strstr(arr3, arr1);
Judge(ret);
ret = strstr(arr3, arr2);
Judge(ret);
ret = strstr(arr1, arr3);
Judge(ret);
ret = strstr(arr2, arr3);
Judge(ret);
ret = strstr(arr4, "simple");
Judge(ret);
ret = strstr(arr1, arr5);
Judge(ret);
return 0;
}
这组测试用例的结果是:
char * my_strstr(const char* str1,const char* str2)
{
assert(str1 && str2);
char* str3 = NULL;
char* str4 = NULL;
while (*str1 != '\0')
{
str4 = str2;
str3 = str1;
while(*str3 == *str4 && *str3 && *str4)
{
str3++;
str4++;
}
if (*str4 == '\0')
return str1;
str1++;
}
return NULL;
}
逻辑图如下:
const char* my_strstr(const char* str1, const char* str2)
{
assert(str1 && str2);
const char* cp = str1;
const char* s1 = NULL;
const char* s2 = NULL;
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;
}
根据测试用例跑出来的结果如下:
二、strtok
了解strtok函数之前,我们要先了解一个概念,相信大家都看过IP地址, 计算机网络通信协议是用的IP协议,于是链接进互联网的设备会有一个IP地址,这个IP地址,IP地址通常用“点分十进制”表示成(a.b.c.d)的形式
IP地址的本质还是一个整数,因为不好记,才有了点分十进制的表示方式。
那如果我们想把这个IP地址的每个数字取出来就会用到,strtok这个函数。又或者你想把邮箱的域名,邮箱名,域名后缀取出来也会用到strtok这个函数。其中@和.这种东西我们就把它称作分隔符
strtok网站以及函数原型如下:
strtok - C++ Reference (cplusplus.com)
char * strtok ( char * str, const char * delimiters );
strtok的函数介绍:
返回值和使用案例:
#include<stdio.h>
#include<string.h>
int main()
{
char str1[] = "hello.CIL.MY@23";
char buf[60] = { 0 };
strcpy(buf, str1);
char* p = ".@";
char* r = NULL;
for (r = strtok(buf, p); r != NULL; r = strtok(NULL, p))
{
printf("%s", r);
}
return 0;
}
打印结果如下:
三、strerror
strerror 的网址:
strerror - C++ Reference (cplusplus.com)
函数原型:
char * strerror ( int errnum );
函数介绍如下:
函数的功能及使用案例:
int main()
{
int i = 0;
for (i = 0; i < 10; i++)
{
printf("%d:%s \n",i,strerror(i));
}
return 0;
}
结果如下: