中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用C語言如何實現strtok和字符串分割函數

發布時間:2021-09-14 13:36:26 來源:億速云 閱讀:158 作者:小新 欄目:開發技術

這篇文章主要為大家展示了“使用C語言如何實現strtok和字符串分割函數”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“使用C語言如何實現strtok和字符串分割函數”這篇文章吧。

一、strtok的基本使用

使用C語言如何實現strtok和字符串分割函數

解析:函數大概說了以下幾點

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

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

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

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

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

分析完后我們看一段代碼,對一段字符串做一個切割

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語言如何實現strtok和字符串分割函數

二、strtok的實現

分析:進來的情況大致分為兩種,str為空和不為空的情況,函數第一次調用的話因為我們要記錄下一次進來時的位置,我們選擇在函數內部創建一個static的靜態變量,static char* p_last = NULL ,并且第一次我們設置為NULL,函數又分為兩種情況,我們切割的話用tmp指針往后走,str指針保存當前位置,所以tmp指針走到\0時我們還要將p_last處理成NULL,其他的情況(str串還能被delimiters分隔)我們就在函數內部把*tmp = ‘\0',再將p_last處理為下一次進來的位置即可

例子:

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語言如何實現strtok和字符串分割函數

第二次分割

使用C語言如何實現strtok和字符串分割函數

第三次分割

使用C語言如何實現strtok和字符串分割函數

第四次切割

使用C語言如何實現strtok和字符串分割函數

實現代碼如下,有需要自取:

char* my_strtok(char* str, char* delimiters)
{
	//str傳NULL的時候如果上次有記錄,則用上一次的下一個位置,不然就為NULL
    static char* p_last = NULL;
	if (str == NULL && p_last == NULL)
		return NULL;
	if (str == NULL)
	{
		//用來返回的當前位置
		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;
				}
			}
			//走到這里表示當前的tmp沒有在delimiters中能找到的
			tmp++;
		}
		//走到這里就是自己走到斜杠\0的位置,就要將p_last 設置成為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;
				}
			}
			//走到這里表示當前的tmp沒有在delimiters中能找到的
			tmp++;
		}
		//找到了,找不到
		char* ret = p_last;
		p_last = NULL;
		return ret;
	}
}

以上是“使用C語言如何實現strtok和字符串分割函數”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

广饶县| 旅游| 温州市| 桑日县| 永清县| 昭苏县| 达孜县| 武夷山市| 巴彦县| 高陵县| 南宁市| 新晃| 遵化市| 灵川县| 富蕴县| 上犹县| 武鸣县| 绥宁县| 宜都市| 祁东县| 饶平县| 石泉县| 丹寨县| 西安市| 洞口县| 长沙县| 如皋市| 泗洪县| 红桥区| 天镇县| 临沧市| 方城县| 肇东市| 汽车| 万源市| 柘荣县| 柳林县| 会同县| 尚义县| 怀集县| 吐鲁番市|