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

 更新时间:2024年10月23日 09:29:49   作者:王哈哈嘻嘻噜噜  
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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言实现内存函数的示例代码

    C语言实现内存函数的示例代码

    本文主要介绍了C语言实现内存函数的示例代码,包括memcpy、memmove、memset和memcmp的使用,具有一定的参考价值,感兴趣的可以了解一下
    2025-02-02
  • Qt使用QWT绘制柱状图详解

    Qt使用QWT绘制柱状图详解

    QT中提供了一个叫做QWT的库。QWT,全称是Qt Widgets for Technical Applications,是一个基于LGPL版权协议的开源项目,可生成各种统计图。本文将通过它绘制柱状图,需要的可以参考一下
    2022-01-01
  • C语言实现简易网络聊天室

    C语言实现简易网络聊天室

    这篇文章主要为大家详细介绍了C语言实现简易网络聊天室,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • C语言之实现栈的基础创建

    C语言之实现栈的基础创建

    这篇文章主要介绍了C语言之实现栈的基础创建,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • Qt中网络编程的实现

    Qt中网络编程的实现

    本文主要介绍了Qt中网络编程的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-02-02
  • C语言中进行函数指针回调的实现步骤

    C语言中进行函数指针回调的实现步骤

    在 C 语言中,函数指针的回调是一种强大的编程技术,它允许我们在特定的事件发生或特定的条件满足时,调用由用户定义的函数,这种机制增加了程序的灵活性和可扩展性,使得代码更具通用性和可重用性,本文给大家介绍了C语言中进行函数指针回调的实现步骤,需要的朋友可以参考下
    2024-07-07
  • C++约瑟夫环问题详解

    C++约瑟夫环问题详解

    大家好,本篇文章主要讲的是C++约瑟夫环问题详解 ,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2022-01-01
  • C++11 写一个只触发一次槽函数的Qt connect函数

    C++11 写一个只触发一次槽函数的Qt connect函数

    这篇文章主要为大家介绍了C++11 写一个只触发一次槽函数的Qt connect函数实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • C语言使用矩形法求定积分的通用函数

    C语言使用矩形法求定积分的通用函数

    这篇文章主要为大家详细介绍了C语言使用矩形法求定积分的通用函数,分别求解sinx, cosx,e^x,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • QT实现将两个时间相加的算法[hh: mm + hh: mm]的示例代码

    QT实现将两个时间相加的算法[hh: mm + hh: mm]的示例代码

    本文主要介绍了QT实现将两个时间相加的算法[hh: mm + hh: mm]的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07

最新评论