最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

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

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

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

4)strtok函數(shù)的第一個(gè)參數(shù)為NULL,函數(shù)將在同一個(gè)字符串中被保存的位置開始,查找下一個(gè)標(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)對(duì)字符串分隔 
	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這個(gè)字符串,第一次出現(xiàn)的位置如果找不到了,就返回第一次出現(xiàn)的起始地址后面的字符也會(huì)接著運(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);//打印出第一個(gè)所在的起始位置 
	}
	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是一個(gè)空字符串,返回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);//打印出第一個(gè)所出現(xiàn)的起始位置 
	}
	return 0;
}

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

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

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

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

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

4,perror

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

perror--將erron中錯(cuò)誤對(duì)用的錯(cuò)誤信息打印出來

perror打印方式:

函數(shù)先打印str指向的字符串,打印:,在打印一個(gè)空格,在打印錯(cuò)誤碼的錯(cuò)誤信息。

例如:

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

就自動(dòng)補(bǔ)齊冒號(hào)和空格,還有錯(cuò)誤的原因

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

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

相關(guān)文章

  • 詳解C++11中的線程鎖和條件變量

    詳解C++11中的線程鎖和條件變量

    C++ 11允許開發(fā)者們以標(biāo)準(zhǔn)的、不依賴于平臺(tái)的方式編寫多線程程序。這篇文章概述了標(biāo)準(zhǔn)庫(kù)對(duì)于線程和同步操作機(jī)制的支持。這些都是非常重要的知識(shí),希望讀者們可以認(rèn)真看一下
    2021-06-06
  • C/C++?Qt?數(shù)據(jù)庫(kù)QSql增刪改查組件應(yīng)用教程

    C/C++?Qt?數(shù)據(jù)庫(kù)QSql增刪改查組件應(yīng)用教程

    Qt?SQL模塊是Qt中用來操作數(shù)據(jù)庫(kù)的類,該類封裝了各種SQL數(shù)據(jù)庫(kù)接口,可以很方便的鏈接并使用。本文主要介紹了Qt數(shù)據(jù)庫(kù)QSql增刪改查組件的應(yīng)用教程,感興趣的同學(xué)可以學(xué)習(xí)一下
    2021-12-12
  • C++實(shí)現(xiàn)接兩個(gè)鏈表實(shí)例代碼

    C++實(shí)現(xiàn)接兩個(gè)鏈表實(shí)例代碼

    這篇文章主要介紹了C++實(shí)現(xiàn)接兩個(gè)鏈表實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • C++ ofstream與ifstream詳細(xì)用法

    C++ ofstream與ifstream詳細(xì)用法

    ofstream是從內(nèi)存到硬盤,ifstream是從硬盤到內(nèi)存,其實(shí)所謂的流緩沖就是內(nèi)存空間
    2013-07-07
  • C++命名空間和缺省參數(shù)介紹

    C++命名空間和缺省參數(shù)介紹

    這篇文章主要介紹了C++命名空間和缺省參數(shù),使用命名空間的目的是對(duì)標(biāo)識(shí)符的名稱進(jìn)行本地化,以避免命名沖突或名字污染,namespace關(guān)鍵字的出現(xiàn)就是針對(duì)這種問題的,缺省參數(shù)是聲明或定義函數(shù)時(shí)為函數(shù)的參數(shù)指定一個(gè)默認(rèn)值,更多詳細(xì)內(nèi)容需要的小伙伴可以參考下面文章內(nèi)容
    2022-01-01
  • 淺析C語(yǔ)言編程中的數(shù)組越界問題

    淺析C語(yǔ)言編程中的數(shù)組越界問題

    這篇文章主要介紹了淺析C語(yǔ)言編程中的數(shù)組越界問題,通過內(nèi)存空間來討論其導(dǎo)致的程序崩潰問題,需要的朋友可以參考下
    2015-11-11
  • C語(yǔ)言中的隱式函數(shù)聲明

    C語(yǔ)言中的隱式函數(shù)聲明

    在c語(yǔ)言里面開來還是要學(xué)習(xí)c++的編程習(xí)慣,使用函數(shù)之前一定要聲明。不然,即使編譯能通過,運(yùn)行時(shí)也可能會(huì)出一些莫名其妙的問題。
    2016-01-01
  • 基于C++的拼多多算法在線筆試題示例

    基于C++的拼多多算法在線筆試題示例

    這篇文章主要介紹了基于C++的拼多多算法在線筆試題,列舉了四個(gè)拼多多的算法筆試題,包括分治法、大數(shù)相乘、貪心算法以及迷宮問題,需要的朋友可以參考下
    2017-08-08
  • C++實(shí)現(xiàn)漢諾塔算法經(jīng)典實(shí)例

    C++實(shí)現(xiàn)漢諾塔算法經(jīng)典實(shí)例

    這篇文章主要介紹了C++實(shí)現(xiàn)漢諾塔算法經(jīng)典實(shí)例,代碼簡(jiǎn)潔高效,對(duì)于學(xué)習(xí)算法的朋友有一定的借鑒價(jià)值,需要的朋友可以參考下
    2014-07-07
  • C++模板基礎(chǔ)之函數(shù)模板與類模板實(shí)例詳解

    C++模板基礎(chǔ)之函數(shù)模板與類模板實(shí)例詳解

    C++ 除了支持函數(shù)模板,還支持類模板(Class Template),所以下面這篇文章主要給大家介紹了關(guān)于C++模板基礎(chǔ)之函數(shù)模板與類模板的相關(guān)資料,需要的朋友可以參考下
    2021-06-06

最新評(píng)論

湾仔区| 额尔古纳市| 汶上县| 宁都县| 博白县| 喀喇| 瑞丽市| 肥西县| 永丰县| 聂拉木县| 通许县| 阳西县| 大荔县| 大厂| 乌审旗| 库伦旗| 漠河县| 全南县| 桐柏县| 苍梧县| 广州市| 高要市| 平凉市| 葵青区| 湾仔区| 岳池县| 民勤县| 江达县| 横山县| 怀柔区| 宣威市| 南宁市| 庆安县| 昭苏县| 临清市| 鞍山市| 子长县| 方城县| 本溪| 沈丘县| 合水县|