0
点赞
收藏
分享

微信扫一扫

小说阅读软件阅读界面设计

米小格儿 2024-02-26 阅读 10

目录

 一、strstr

二、strtok

三、strerror


 一、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;
}

 结果如下:

 

举报

相关推荐

0 条评论