C语言进阶版第13课—字符函数和字符串函数2

1. strstr函数的使用和模拟实现

1.1 strstr函数的使用

  • strstr函数是用来通过一个字符串来查找另一个字符串的,它的原形如下:
  • char* strstr ( const char* str1, const char* str2 )
  • str1和str2分别是两个字符串的地址,strstr函数是在str1的字符串中查找str2所指的字符串
  • strstr — string string —它返回的是字符串str2在字符串str1中第一次出现的位置

在这里插入图片描述


1.2 模拟实现strstr函数

  • 首先我们先创建一个函数my_strstr,用来实现strstr函数的作用
  • 接下来我们进行分析
    在这里插入图片描述

//模拟实现strstr函数
#include <stdio.h>
#include <assert.h>
const char* my_strstr(const char* str1, const char* str2)
{
	assert(str1 && str2);
	//定义两个指针来进行匹配
	const char* s1 = str1;
	const char* s2 = str2;

	//cur指针用来标记可能进行匹配的位置
	const char* cur = str1;
    //若cur未指向'\0'
	while (*cur)
	{
		//进行一次匹配
		s1 = cur;
		s2 = str2;
		while(*s1 == *s2)
		{
			s1++;
			s2++;
		}
		if (*s2 == '\0')
			return cur;
		//cur每次匹配完后++
		cur++;
	}
	return NULL;
}
int main()
{
	char arr1[] = "abbbbcdefabcdef";
	char arr2[] = "bbc";
	const char* ret = my_strstr(arr1, arr2);
	if (ret == NULL)
		printf("no\n");
	else
		printf("%s\n",ret);
	return 0;
}


1.3 strstr函数和strncpy函数、puts函数的混合使用

//strstr函数和strncpy函数、puts函数
#include <stdio.h>
#include <string.h>

int main()
{
    char str[] = "This is a simple string";
    char* pch;
    pch = strstr(str, "simple");
    if (pch != NULL)
        strncpy(pch, "abcdef", 6);
    puts(str);
    return 0;
}

在这里插入图片描述


2. strtok函数的使用

  • strtok函数的原形是
  • char* strtok ( char* str, const char* sep );
  • sep指向一个字符串,该字符串实际上是一堆用作分隔符的集合
  • 第一个参数str指向一个字符串,它其中包含0个或多个由sep字符串中的一个或多个分隔符分隔的标记
  • strtok函数找到str中的下一个标记,并用’\0’结尾,返回一个指向这个标记的指针
  • strtok函数会改变会被操作的字符串,因此一般是先拷贝一份字符串给strtok使用
  • 当strtok函数的第一个参数不为NULL时,函数找到str中的第一个标记,并且strstr会保存它在字符串中的位置
  • 当strtok函数的第一个参数是NULL时,函数将从保存的位置开始,查找下一个标记
  • 如果字符串中不存在更多的标记,则返回NULL

  通俗点讲,就是strtok有两个参数,第一个参数指向的是字符串,不过这个字符串中有英文字母和分隔符的组合,另一个参数也是指向字符串,不过第二个参数的字符串中全部是分隔符,该分隔符是用来查找第一个参数字符串中出现分隔符的

  • char* arr1[ ] = “1567899239@qq.com”
  • char* arr2[ ] = “@.”
  • char* str = arr1;
  • char* sep = arr2;
  • 就像上面代码,sep字符串的分隔符是用来查找str字符串中出现该分隔符的位置,并将str中该分隔符改为’\0’,并且返回指向该字符串的指针
  • 就像上面代码,他会先找到第一个出现分隔符’@‘的位置,然后将它改为’\0’,最后返回指向“1567899239”的地址(即“1”的地址),最后因为第一个参数不为NULL,strtok函数会保存此时被修改的’\0’位置,若下次第一个参数是NULL,它将会从该处开始查找下一个分隔符,即从" qq "处开始查
  • sep字符串中的分隔符不分先后

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


  • 注意
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述


3. strerror函数的使用

在这里插入图片描述


在这里插入图片描述


  • 而相对于strerror函数,perror函数操作起来更为简单
  • perror函数会直接将错误信息打印出来
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值