激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - C/C++ - 帶你用C語(yǔ)言實(shí)現(xiàn)strtok和字符串分割函數(shù)

帶你用C語(yǔ)言實(shí)現(xiàn)strtok和字符串分割函數(shù)

2022-01-06 13:30^jhao^ C/C++

下面小編就為大家?guī)?lái)一篇c語(yǔ)言中字符串分割函數(shù)及實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

前言

字符串分割函數(shù)strtok,大家可能都知道他怎么使用,一旦要用的時(shí)候就會(huì)心生疑惑,不知道它的內(nèi)部的實(shí)現(xiàn),廢話不多說(shuō),本篇就來(lái)帶大家看看strtok的基本使用和實(shí)現(xiàn)

 

一、strtok的基本使用

帶你用C語(yǔ)言實(shí)現(xiàn)strtok和字符串分割函數(shù)

解析:函數(shù)大概說(shuō)了以下幾點(diǎn)

1.str就是我們要去拆分的字符串,注意,我們會(huì)對(duì)該字符串進(jìn)行更改,所以一般我們會(huì)拷貝一份然后去分割拷貝的那份字符串!!

2.delimiters 就是我們定義的切分的符號(hào),假如想要用空格作為分割符,我們就可以定義chardelimiters [NUM]=" " ** 請(qǐng)注意里面放了一個(gè)空格的呀!!
此處NUM可以自己定義大小,這里的delimiters 可以有多種分割方式。

3.strtok函數(shù)的第一個(gè)參數(shù)不為 NULL ,函數(shù)將找到str中第一個(gè)標(biāo)記,strtok函數(shù)將會(huì)有一個(gè)設(shè)置保存他修改了的下一個(gè)位置的地址,如“wo ai ni”,其中若用空格作為分隔符就會(huì)將空格處換成*"\n"**,返回w的位置,并且函數(shù)內(nèi)部保存a的位置。

4.strtok函數(shù)的第一個(gè)參數(shù)為 NULL ,函數(shù)將在同一個(gè)字符串中被保存的位置(即上面所說(shuō)的位置w)開始,查找下一個(gè)標(biāo)記。

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

分析完后我們看一段代碼,對(duì)一段字符串做一個(gè)切割

int main()
{
	char a[] = "wo shi bo zhu";
	char* retArr[10];
	retArr[0] = strtok(a, " ");
	int i = 1;
	while (retArr[i++] = strtok(NULL, " "));
	for (int i = 0; i < 10; i++)
	{
		printf("%s ", retArr[i]);
	}
	return 0;
}

帶你用C語(yǔ)言實(shí)現(xiàn)strtok和字符串分割函數(shù)

 

二、strtok的實(shí)現(xiàn)

分析:進(jìn)來(lái)的情況大致分為兩種,str為空和不為空的情況,函數(shù)第一次調(diào)用的話因?yàn)槲覀円涗浵乱淮芜M(jìn)來(lái)時(shí)的位置,我們選擇在函數(shù)內(nèi)部創(chuàng)建一個(gè)static的靜態(tài)變量,static char* p_last = NULL ,并且第一次我們?cè)O(shè)置為NULL,函數(shù)又分為兩種情況,我們切割的話用tmp指針往后走,str指針保存當(dāng)前位置,所以tmp指針走到\0時(shí)我們還要將p_last處理成NULL,其他的情況(str串還能被delimiters分隔)我們就在函數(shù)內(nèi)部把*tmp = ‘\0',再將p_last處理為下一次進(jìn)來(lái)的位置即可

例子:

int main()
{
	char a[] = "wo ai ni";
	char* retArr[10];
	retArr[0] = my_strtok(a, " ");
	int i = 1;
	while (retArr[i++] = my_strtok(NULL, " "));
	for (int i = 0; i < 10; i++)
	{
		printf("%s ", retArr[i]);
	}
	return 0;
}

第一次分割

帶你用C語(yǔ)言實(shí)現(xiàn)strtok和字符串分割函數(shù)

第二次分割

帶你用C語(yǔ)言實(shí)現(xiàn)strtok和字符串分割函數(shù)

第三次分割

帶你用C語(yǔ)言實(shí)現(xiàn)strtok和字符串分割函數(shù)

第四次切割

帶你用C語(yǔ)言實(shí)現(xiàn)strtok和字符串分割函數(shù)

實(shí)現(xiàn)代碼如下,有需要自取:

char* my_strtok(char* str, char* delimiters)
{
	//str傳NULL的時(shí)候如果上次有記錄,則用上一次的下一個(gè)位置,不然就為NULL
  static char* p_last = NULL;
	if (str == NULL && p_last == NULL)
		return NULL;
	if (str == NULL)
	{
		//用來(lái)返回的當(dāng)前位置
		str = p_last;
		char* tmp = p_last;
		int len = strlen(delimiters);
		while (*tmp)
		{
			for (int i = 0; i < len; ++i)
			{
				if (*tmp == delimiters[i])
				{
					p_last = tmp+1;
					*tmp = '\0';
					return str;
				}
			}
			//走到這里表示當(dāng)前的tmp沒有在delimiters中能找到的
			tmp++;
		}
		//走到這里就是自己走到斜杠\0的位置,就要將p_last 設(shè)置成為NULL
		char* ret = p_last;
		p_last = NULL;
		return ret;
	}
	else
	{
		char* tmp = str;
		int len = strlen(delimiters);
		while (*tmp)
		{
			for (int i = 0; i < len; ++i)
			{
				if (*tmp == delimiters[i])
				{
					p_last = tmp+1;
					*tmp = '\0';
					return str;
				}
			}
			//走到這里表示當(dāng)前的tmp沒有在delimiters中能找到的
			tmp++;
		}
		//找到了,找不到
		char* ret = p_last;
		p_last = NULL;
		return ret;
	}
}

 

總結(jié)

本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注服務(wù)器之家的更多內(nèi)容!

原文鏈接:https://blog.csdn.net/weixin_52344401/article/details/120220585

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 中国av中文字幕 | 精品国产一区二区三区在线观看 | 亚洲精品有限 | 久久精品之 | 成人亚洲一区二区 | videos高潮 | 黄色试看视频 | 少妇淫片免费一级毛片 | 九九热视频在线免费观看 | av免费在线播放网址 | 蜜桃麻豆视频 | 亚洲欧美国产高清va在线播放 | www.54271.com| 日韩电影一区二区 | 国产一级在线观看视频 | 国产精品亚洲yourport | 中文字幕综合在线观看 | 一级做人爱c黑人影片 | 精品国产乱码久久久久久久 | 欧美成人一二区 | 欧美精品一区自拍a毛片在线视频 | 92自拍视频| 在线观看国产 | 成人一级视频在线观看 | 免费看一级视频 | 欧美成年人视频在线观看 | 免费午夜视频在线观看 | 欧美激情精品久久久久久久久久 | 欧美成人影院 | 欧美一级做一级爱a做片性 久久久资源网 | 国产精品久久久久av | 午夜在线成人 | 国产成人综合在线视频 | 久久密| 石原莉奈日韩一区二区三区 | 欧美人一级淫片a免费播放 久久99精品久久久久久园产越南 | 国产欧美在线观看不卡一 | 欧美aaaaa一级毛片在线 | 久久精品欧美一区 | 日本成人午夜视频 | 久草在线资源观看 |