字符串函数(三)


一、特殊的字符串函数

1.strstr()函数

char * strstr ( const char *str1, const char * str2);

如果str2是str1的子串,则返回在str2在str1上出现的首地址,反之,则返回空指针。

char* my_strstr(const char* str1, const char* str2)
{
	assert(str1 && str2); //断言,防止空指针的出现
	const char* ch = str1;
	if (*str2 == '\0')
		return ch;
	while (*ch)
	{
		const char* tmp1 = ch;
		const char* tmp2 = str2;

		while (*tmp1 == *tmp2 && *tmp1) //循环继续的条件是,*tmp1 == *tmp2,且*tmp1不为空
		{
			tmp1++;
			tmp2++;
		}

		if (*tmp2 == '\0')
			return ch;//如果执行到这一步,说明前面的循环使得str2的字符全部遍历完毕,也就是str2是str1的子串,返回ch就可以了
		ch++;
	}
	return NULL;
}

2.strtok()函数

char * strtok ( char * str, const char * sep );

字符串切割函数,类似于split()函数。
·sep参数是一个字符串,定义了用作分隔符的字符集合。
·第一个参数指定一个字符串,它包含了0个或多个由sep字符串中一个或者多个分隔符分割的标记。
·strtok函数找到str中的下一个标记,并将其用 \0 结尾,返回一个指向这个标记的指针。
·strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置。
·strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标记。
·如果字符串中不存在更多的标记,则返回 NULL 指针。

int main()
{
	char str1[] = "zsfjasfj@147.234.com";
	char* p = "@.";
	char* ch = NULL;
	for (ch = strtok(str1, p); ch != NULL; ch = strtok(NULL, p))
	{
		printf("%s\n", ch);
	}
	return 0;
}

在这里插入图片描述

3.strerror()函数

char * strerror ( int errnum );

返回错误码,所对应的错误信息。

int main()
{
	printf("%s\n", strerror(0));
	printf("%s\n", strerror(1));
	printf("%s\n", strerror(2));
	printf("%s\n", strerror(3));
	printf("%s\n", strerror(4));
	return 0;
}

在这里插入图片描述

int main()
{
	FILE* pFile;
	pFile = fopen("unexist.ent", "r");
	if (pFile == NULL)
		printf("Error opening file unexist.ent: %s\n", strerror(errno));
	return 0;
}

在这里插入图片描述

总结

使用strtok()函数时,是会改变源字符串的,所以我们在使用的使用,尽量拷贝一份临时的字符串,对该字符串进行操作。
在使用strerror()函数的使用,通常要引errno.h头文件,这个头文件里包含了一个全局变量errno,他记录的是最后一个错误码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值