欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

c語言字符串函數(shù)strstr,strtok,strerror的使用和實(shí)現(xiàn)

 更新時間:2024年10月23日 09:29:49   作者:王哈哈嘻嘻嚕嚕  
C語言中的字符串處理函數(shù)如strtok、strstr和strerror對于字符串的處理有著重要的作用,strtok函數(shù)用于分割字符串,它通過sep參數(shù)指定的分隔符來分割str參數(shù)指定的字符串,并返回分割后的每個子字符串

1,strtok函數(shù)的使用和模擬實(shí)現(xiàn)

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

會有static修飾變量,有記憶功能,會保存字符串的位置,下次找再繼續(xù)找。

1)sep參數(shù)指向一個字符串,它包含了0個或者多個由sep字符中一個或則多個分隔符分割的標(biāo)記

2)第一個參數(shù)指定一個字符串,并將其用\0結(jié)尾,返回一個指向這個標(biāo)記的指針。

3)strtok函數(shù)的第一個參數(shù)不為NULL,函數(shù)將找到str中第一個標(biāo)記,strtok函數(shù)將保存它在字符串中的位置。

4)strtok函數(shù)的第一個參數(shù)為NULL,函數(shù)將在同一個字符串中被保存的位置開始,查找下一個標(biāo)記。

5)如果字符串中不存在更多的標(biāo)記,則返回NULL指針。

strtok函數(shù)和strcpy的使用

#include<stdio.h>
#include<string.h>
int main()
{
	char arr1[]="wangyiting@very.beautiful";
	char arr2[]={0};
	strcpy(arr2,arr1);//將arr1拷貝到arr2里面 
	char *sep="@.";//設(shè)置分隔符 
	char *ret=NULL;//初始化
	//for循環(huán)對字符串分隔 
	for(ret=strtok(arr2,sep);ret!=NULL;ret=strtok(NULL,sep))
	{
		printf("%s\n",ret);//換行打印出分隔開后的字符串 
	}
	return 0;
 } 

2,strstr的使用和模擬實(shí)現(xiàn)

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

功能:在str1中找到了str2這個字符串,第一次出現(xiàn)的位置如果找不到了,就返回第一次出現(xiàn)的起始地址后面的字符也會接著運(yùn)行出來,如果找不到,就返回NULL。

#include<stdio.h>
#include<string.h>
int main()
{
	char arr1[]="abcdefg";
	char arr2[]="abc";//初始化 
	char *ret=strstr(arr1,arr2);//調(diào)用函數(shù) 
	if(ret==NULL)//進(jìn)行判斷 
	{
		printf("不存在\n"); 
	}
	else
	{
		printf("%s\n",ret);//打印出第一個所在的起始位置 
	}
	return 0;
 } 

strstr的模擬實(shí)現(xiàn)

#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,都進(jìn)行++ 
			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)//進(jìn)行判斷 
	{
		printf("不存在\n");
	}
	else
	{
		printf("%s\n",ret);//打印出第一個所出現(xiàn)的起始位置 
	}
	return 0;
}

3,strerror的使用和模擬實(shí)現(xiàn)

sterror函數(shù)可以把參數(shù)部分錯誤碼對應(yīng)的錯誤信息的字符串地址返回來。

一般是放在errno.h這個頭文件中說明的,c語言程序啟動的時候就會使用一個全局變量error來記錄程序的當(dāng)前錯誤碼,只不過程序啟動的時候errno是0,表示沒有錯誤,當(dāng)我們使用標(biāo)準(zhǔn)庫中的函數(shù)發(fā)生了某種錯誤,就將會對應(yīng)的錯誤碼,存放在erron中,strerror函數(shù)就可以將錯誤對應(yīng)的錯誤信息字符串的地址返回。

#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;
}

有一個與之相似用法的函數(shù)

4,perror

sterror--將錯誤碼對應(yīng)的錯誤信息的字符串的起始地址返回

perror--將erron中錯誤對用的錯誤信息打印出來

perror打印方式:

函數(shù)先打印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;
}

就自動補(bǔ)齊冒號和空格,還有錯誤的原因

//perror也相當(dāng)于printf+sterror。

到此這篇關(guān)于c語言字符串函數(shù)strstr,strtok,strerror的文章就介紹到這了,更多相關(guān)c語言 strstr,strtok,strerror內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言實(shí)現(xiàn)內(nèi)存函數(shù)的示例代碼

    C語言實(shí)現(xiàn)內(nèi)存函數(shù)的示例代碼

    本文主要介紹了C語言實(shí)現(xiàn)內(nèi)存函數(shù)的示例代碼,包括memcpy、memmove、memset和memcmp的使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-02-02
  • Qt使用QWT繪制柱狀圖詳解

    Qt使用QWT繪制柱狀圖詳解

    QT中提供了一個叫做QWT的庫。QWT,全稱是Qt?Widgets?for?Technical?Applications,是一個基于LGPL版權(quán)協(xié)議的開源項(xiàng)目,可生成各種統(tǒng)計(jì)圖。本文將通過它繪制柱狀圖,需要的可以參考一下
    2022-01-01
  • C語言實(shí)現(xiàn)簡易網(wǎng)絡(luò)聊天室

    C語言實(shí)現(xiàn)簡易網(wǎng)絡(luò)聊天室

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)簡易網(wǎng)絡(luò)聊天室,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • C語言之實(shí)現(xiàn)棧的基礎(chǔ)創(chuàng)建

    C語言之實(shí)現(xiàn)棧的基礎(chǔ)創(chuàng)建

    這篇文章主要介紹了C語言之實(shí)現(xiàn)棧的基礎(chǔ)創(chuàng)建,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • Qt中網(wǎng)絡(luò)編程的實(shí)現(xiàn)

    Qt中網(wǎng)絡(luò)編程的實(shí)現(xiàn)

    本文主要介紹了Qt中網(wǎng)絡(luò)編程的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • C語言中進(jìn)行函數(shù)指針回調(diào)的實(shí)現(xiàn)步驟

    C語言中進(jìn)行函數(shù)指針回調(diào)的實(shí)現(xiàn)步驟

    在 C 語言中,函數(shù)指針的回調(diào)是一種強(qiáng)大的編程技術(shù),它允許我們在特定的事件發(fā)生或特定的條件滿足時,調(diào)用由用戶定義的函數(shù),這種機(jī)制增加了程序的靈活性和可擴(kuò)展性,使得代碼更具通用性和可重用性,本文給大家介紹了C語言中進(jìn)行函數(shù)指針回調(diào)的實(shí)現(xiàn)步驟,需要的朋友可以參考下
    2024-07-07
  • C++約瑟夫環(huán)問題詳解

    C++約瑟夫環(huán)問題詳解

    大家好,本篇文章主要講的是C++約瑟夫環(huán)問題詳解 ,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • C++11 寫一個只觸發(fā)一次槽函數(shù)的Qt connect函數(shù)

    C++11 寫一個只觸發(fā)一次槽函數(shù)的Qt connect函數(shù)

    這篇文章主要為大家介紹了C++11 寫一個只觸發(fā)一次槽函數(shù)的Qt connect函數(shù)實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • C語言使用矩形法求定積分的通用函數(shù)

    C語言使用矩形法求定積分的通用函數(shù)

    這篇文章主要為大家詳細(xì)介紹了C語言使用矩形法求定積分的通用函數(shù),分別求解sinx, cosx,e^x,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • QT實(shí)現(xiàn)將兩個時間相加的算法[hh:?mm?+?hh:?mm]的示例代碼

    QT實(shí)現(xiàn)將兩個時間相加的算法[hh:?mm?+?hh:?mm]的示例代碼

    本文主要介紹了QT實(shí)現(xiàn)將兩個時間相加的算法[hh:?mm?+?hh:?mm]的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07

最新評論