C 语言

关注公众号 jb51net

关闭
首页 > 软件编程 > C 语言 > c语言 strstr,strtok,strerror

c语言字符串函数strstr,strtok,strerror的使用和实现

作者:王哈哈嘻嘻噜噜

C语言中的字符串处理函数如strtok、strstr和strerror对于字符串的处理有着重要的作用,strtok函数用于分割字符串,它通过sep参数指定的分隔符来分割str参数指定的字符串,并返回分割后的每个子字符串

1,strtok函数的使用和模拟实现

char * strtok(char * str,const char * sep)(分隔字符串的作用)

会有static修饰变量,有记忆功能,会保存字符串的位置,下次找再继续找。

1)sep参数指向一个字符串,它包含了0个或者多个由sep字符中一个或则多个分隔符分割的标记

2)第一个参数指定一个字符串,并将其用\0结尾,返回一个指向这个标记的指针。

3)strtok函数的第一个参数不为NULL,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置。

4)strtok函数的第一个参数为NULL,函数将在同一个字符串中被保存的位置开始,查找下一个标记。

5)如果字符串中不存在更多的标记,则返回NULL指针。

strtok函数和strcpy的使用

#include<stdio.h>
#include<string.h>
int main()
{
	char arr1[]="wangyiting@very.beautiful";
	char arr2[]={0};
	strcpy(arr2,arr1);//将arr1拷贝到arr2里面 
	char *sep="@.";//设置分隔符 
	char *ret=NULL;//初始化
	//for循环对字符串分隔 
	for(ret=strtok(arr2,sep);ret!=NULL;ret=strtok(NULL,sep))
	{
		printf("%s\n",ret);//换行打印出分隔开后的字符串 
	}
	return 0;
 } 

2,strstr的使用和模拟实现

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

功能:在str1中找到了str2这个字符串,第一次出现的位置如果找不到了,就返回第一次出现的起始地址后面的字符也会接着运行出来,如果找不到,就返回NULL。

#include<stdio.h>
#include<string.h>
int main()
{
	char arr1[]="abcdefg";
	char arr2[]="abc";//初始化 
	char *ret=strstr(arr1,arr2);//调用函数 
	if(ret==NULL)//进行判断 
	{
		printf("不存在\n"); 
	}
	else
	{
		printf("%s\n",ret);//打印出第一个所在的起始位置 
	}
	return 0;
 } 

strstr的模拟实现

#include<stdio.h>
#include<assert.h>
const char * my_strstr(const char* str1,const char* str2)
{
	assert(str1&&str2);
	const char* s1=NULL;
	const char* s2=NULL;
	const char* cur=str1;
	if(*str2=='\0')
	{
		return str1;//如果str2是一个空字符串,返回str1 
	}
	while(*cur!='\0')
	{
		s1=cur;
		s2=str2;
		while(*s1==*s2&&s1&&s2)
		{
			s1++;//判断的字符相同则s1,s2,都进行++ 
			s2++;
		}
		if(*s2=='\0')//若是s2为\0则返回cur 
		{
			return cur;
		}
		cur++;
	}
 } 
int main()
{
	char arr1[]="abcdefg";
	char arr2[]="cde";//初始化 
	const char* ret=my_strstr(arr1,arr2);
	if(ret==NULL)//进行判断 
	{
		printf("不存在\n");
	}
	else
	{
		printf("%s\n",ret);//打印出第一个所出现的起始位置 
	}
	return 0;
}

3,strerror的使用和模拟实现

sterror函数可以把参数部分错误码对应的错误信息的字符串地址返回来。

一般是放在errno.h这个头文件中说明的,c语言程序启动的时候就会使用一个全局变量error来记录程序的当前错误码,只不过程序启动的时候errno是0,表示没有错误,当我们使用标准库中的函数发生了某种错误,就将会对应的错误码,存放在erron中,strerror函数就可以将错误对应的错误信息字符串的地址返回。

#include<stdio.h>
#include<string.h>
int main()
{
	int i=0;
	for(i=0;i<10;i++)
	{
		pritnf("%s\n",strerror(i));
	 } 
	return 0;
 } 

#include<stdio.h>
#include<string.h>
#include<errno.h>
int main()
{
	//打开文件
	//用r方式打开,表示'读‘以读文件的形式 
	//打开文件,如果文件不存在,就打开失败
	FILE*pf=fopen("data.txt","r");
	if(pf==NULL)
	{
		printf("打开文件失败\n");
	 } 
	 else
	 {
	 	printf("打开文件成功\n");
	 	fclose(pf);
	 	pf=NULL;
	 }
	return 0;
}

有一个与之相似用法的函数

4,perror

sterror--将错误码对应的错误信息的字符串的起始地址返回

perror--将erron中错误对用的错误信息打印出来

perror打印方式:

函数先打印str指向的字符串,打印:,在打印一个空格,在打印错误码的错误信息。

例如:

#include<stdio.h>
#include<string.h>
#include<errno.h>
int main()
{
	//打开文件
	//用r方式打开,表示'读‘以读文件的形式 
	//打开文件,如果文件不存在,就打开失败
	FILE*pf=fopen("data.txt","r");
	if(pf==NULL)
	{
		printf("打开文件失败,原因是:%s\n",strerror(erron));
		perror("打开文件失败,原因是"); 
	 } 
	 else
	 {
	 	printf("打开文件成功\n");
	 	fclose(pf);
	 	pf=NULL;
	 }
	return 0;
}

就自动补齐冒号和空格,还有错误的原因

//perror也相当于printf+sterror。

到此这篇关于c语言字符串函数strstr,strtok,strerror的文章就介绍到这了,更多相关c语言 strstr,strtok,strerror内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文