C语言字符串函数(2)

   上一篇我们介绍了strlen函数,strcpy函数,strcat函数以及strcmp函数的用法以及模拟实现,本篇接着来介绍剩余的三个字符串函数,分别是strstr函数,strtok函数以及strerror函数。

目录

1.strstr函数

1.了解strstr函数。

2.strstr函数的使用

3.strstr函数的模拟实现。

2.strtok函数

1.了解strtok函数

2.strtok函数的使用

3.strerror函数

1.了解strerror函数

2.strerror函数的使用


1.strstr函数

1.了解strstr函数。

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

strstr函数的返回类型为char *,所需要的两个参数是不可改变地址内容的char *类型的指针。

2.strstr函数的使用

int main()
{
	char arr[] = "abcdefrghfh";
	char num[] = "defr";
	char aum[] = "bbcd";
	printf("%s\n", strstr(arr, num));
	printf("%s\n", strstr(arr, aum));
	return 0;
}

  从上代码我们就能看出,strstr函数实际就是在字符串1中找字符串2,如果存在字符串2,就会返回出现字符串2位置的地址,如果不存在,则会返空指针NULL。

3.strstr函数的模拟实现。

char* my_strstr(const char* arr, const char* num)
{
	const char* a = arr;//不改变arr的地址,所以将它存在a中。
	const char* s1 = NULL;
	const char* s2 = NULL;
	if (!*num)//*num如果为空,则为假,加入感叹号改为真。
		return (char *)arr;//当num为空时,不需要判断,直接返回arr就可。
	while (*arr)
	{
		s1 = a;
		s2 = num;//将s2重新返回num的地址。
		while (*s1&&*s2&&(*s1 == *s2))
		{
			s1++;
			s2++;//s1与s2同时向后移。
		}
		if (*s2 == '\0')
		{
			return (char *)a;
		}
		a++;//不满足,则向后移一位,从第二位开始继续判断。
	}
	return NULL;//都不满足,这说明没有该字符串,返回空指针NULL。
}
int main()
{
	char* arr = "abbcdefg";
	char* num = "defg";
	char *add=my_strstr(arr, num);
	printf("%s", add);
	return 0;
}

2.strtok函数

1.了解strtok函数

char * strtok ( char * str, const char * delimiters );
sep参数指向⼀个字符串,定义了⽤作分隔符的字符集合
第⼀个参数指定⼀个字符串,它包含了0个或者多个由sep字符串中⼀个或者多个分隔符分割的标
  记。
strtok函数找到str中的下⼀个标记,并将其⽤ \0 结尾,返回⼀个指向这个标记的指针。(注:
  strtok函数会改变被操作的字符串,所以在使⽤strtok函数切分的字符串⼀般都是临时拷⻉的内容
  并且可修改。)
strtok函数的第⼀个参数不为NULL ,函数将找到str中第⼀个标记,strtok函数将保存它在字符串
  中的位置。
strtok函数的第⼀个参数为 NULL ,函数将在同⼀个字符串中被保存的位置开始,查找下⼀个标
  记。
如果字符串中不存在更多的标记,则返回 NULL 指针。

2.strtok函数的使用

我们假设有“zhangsan@163.com”这段字符串,我们只想将zhangsan,163,com这三部分单独拿出来,这时候就可以使用strtok函数,而@以及.就叫做分隔符。

​​int main()
{
	char arr[] = "zhangsan@163.com";
	char* p = "@.";
	printf("%s\n", strtok(arr, p));
	printf("%s\n", strtok(NULL, p));
	printf("%s\n", strtok(NULL, p));
	return 0;
}

分析:

首先我们需要自定义一个常量字符串,其中包含的就是原始字符串的分隔符。

其次需要知道: strtok函数的第⼀个参数不为NULL ,函数将找到str中第⼀个标记,strtok函数将保存它在字符串
  中的位置。
strtok函数的第⼀个参数为 NULL ,函数将在同⼀个字符串中被保存的位置开始,查找下⼀个标
  记。
如果字符串中不存在更多的标记,则返回 NULL 指针。

我们可以这样理解:

在我们首次传入的是arr首元素的地址,此地址不为空,strtok函数就从首元素向后找,当找到第一个分隔符,就保存这个位置,然后终止;我们第二次传入空指针,则strtok函数就会从上一次标记的位置开始向后找,当找到第二个分隔符时,又会记得第二个分隔符的位置~~以此类推,直到所有分隔符找完时,则返回空指针。

所以上述代码我们可以做这样的修改:

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

3.strerror函数

1.了解strerror函数

char * strerror ( int errnum );
    strerror函数可以把参数部分错误码对应的错误信息的字符串地址返回来。
    在不同的系统和C语⾔标准库的实现中都规定了⼀些错误码,⼀般是放在 errno.h 这个头⽂件中说明 的,C语⾔程序启动的时候就会使⽤⼀个全⾯的变量errno来记录程序的当前错误码,只不过程序启动 的时候errno是0,表⽰没有错误,当我们在使⽤标准库中的函数的时候发⽣了某种错误,就会讲对应 的错误码,存放在errno中,⽽⼀个错误码的数字是整数很难理解是什么意思,所以每⼀个错误码都是 有对应的错误信息的。strerror函数就可以将错误对应的错误信息字符串的地址返回.
int main()
{
 int i = 0;
 for (i = 0; i <= 10; i++) {
 printf("%s\n", strerror(i));
 }
 return 0;
}

2.strerror函数的使用

#include <stdio.h>
#include <string.h>
#include <errno.h>
int main ()
{
 FILE * pFile;
 pFile = fopen ("unexist.ent","r");//fopen打开unexist.ent文件
 if (pFile == NULL)
 printf ("Error opening file unexist.ent: %s\n", strerror(errno));
 return 0;
}

当然,上述代码对于初学者来说不易理解,在我们后续学习中会慢慢学到的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值