国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

?【C語言】長篇詳解,字符系列篇3-----strstr,strtok,strerror字符串函數(shù)的使用【圖文詳解?】

這篇具有很好參考價值的文章主要介紹了?【C語言】長篇詳解,字符系列篇3-----strstr,strtok,strerror字符串函數(shù)的使用【圖文詳解?】。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

歡迎來CILMY23的博客喔,本期系列為?【C語言】長篇詳解,字符系列篇3-----strstr,strtok,strerror字符串函數(shù)的使用【圖文詳解?】,圖文講解各種字符串函數(shù),帶大家更深刻理解C語言中各種字符串函數(shù)的應用,感謝觀看,支持的可以給個贊哇。?

前言

上一篇說到,有不受長度限制的字符串函數(shù),它們分別是strcpy,strcat,strcmp,為了方便我們想要長度限制,C語言提供了三個加n的函數(shù),strncpy,strncat,strncmp函數(shù),本期將了解剩下的三個字符串函數(shù),它們分別是strstr,strtok,strerror。

目錄

?一、strstr

二、strtok

三、strerror


?一、strstr?

?strstr函數(shù)可以在cplusplus中查到,strstr - C++ Reference (cplusplus.com)

函數(shù)原型如下:

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

?函數(shù)介紹如下:

?【C語言】長篇詳解,字符系列篇3-----strstr,strtok,strerror字符串函數(shù)的使用【圖文詳解?】,C語言,c語言,開發(fā)語言

返回值和使用案例:

?【C語言】長篇詳解,字符系列篇3-----strstr,strtok,strerror字符串函數(shù)的使用【圖文詳解?】,C語言,c語言,開發(fā)語言??【C語言】長篇詳解,字符系列篇3-----strstr,strtok,strerror字符串函數(shù)的使用【圖文詳解?】,C語言,c語言,開發(fā)語言

strstr的使用

?strstr函數(shù)功能就是返回str2在str1中第一次出現(xiàn)的位置,如果str2沒有在str1中出現(xiàn),就返回NULL

#include<stdio.h>
#include<string.h>

int main()
{
	char arr1[] = "hello CILMY23";
	char arr2[] = "C";

	char* ret = strstr(arr1, arr2);
	if (ret != NULL)
		printf("%s \n", ret);
	else
		printf("找不到\n");

	ret = strstr(arr2, arr1);
	if (ret != NULL)
		printf("%s \n", ret);
	else
		printf("找不到\n");
	return 0;
}

結果如下:

?【C語言】長篇詳解,字符系列篇3-----strstr,strtok,strerror字符串函數(shù)的使用【圖文詳解?】,C語言,c語言,開發(fā)語言

?strstr的模擬實現(xiàn)

為了檢驗自己寫的是否對不對,我們拿出幾組的測試用例

void Judge(char* p)
{
	if (p != NULL)
		printf("%s \n", p);
	else
		printf("找不到\n");
}


int main()
{
	char arr1[] = "hello CILMY23";
	char arr2[] = "C";
	char arr3[] = "lllC";
	char arr4[] = "This is a simple string";
	char arr5[] = "";

	char* ret = strstr(arr1, arr2);
	Judge(ret);
	ret = strstr(arr2, arr1);
	Judge(ret);

	ret = strstr(arr3, arr1);
	Judge(ret);

	ret = strstr(arr3, arr2);
	Judge(ret);

	ret = strstr(arr1, arr3);
	Judge(ret);

	ret = strstr(arr2, arr3);
	Judge(ret);

	ret = strstr(arr4, "simple");
	Judge(ret);
	
	ret = strstr(arr1, arr5);
	Judge(ret);

	return 0;
}

?這組測試用例的結果是:

?【C語言】長篇詳解,字符系列篇3-----strstr,strtok,strerror字符串函數(shù)的使用【圖文詳解?】,C語言,c語言,開發(fā)語言

思路一?

?思路解析:

遍歷源字符串,找到與字符串2首字母相同的字符,進入循環(huán)2,但在進入之前需要保存一份當前位置,然后我們再去利用新開辟出來的兩個指針去遍歷兩個字符串,如果有不相等的地方,那么字符串肯定是走不到尾巴的,也就是不可能等于'\0',此時繼續(xù)遍歷字符串1,直到字符串1遍歷結束,完成整個字符串的查找,沒有就返回NULL。

char * my_strstr(const char* str1,const char* str2)
{
	assert(str1 && str2);
	char* str3 = NULL;
	char* str4 = NULL;
	while (*str1 != '\0')
	{		
		str4 = str2;
		str3 = str1;
		while(*str3 == *str4 && *str3 && *str4)
		{
			str3++;
			str4++;
		}
		if (*str4 == '\0')
			return str1;
		str1++;
	}
	return NULL;
}

?邏輯圖如下:

?【C語言】長篇詳解,字符系列篇3-----strstr,strtok,strerror字符串函數(shù)的使用【圖文詳解?】,C語言,c語言,開發(fā)語言

代碼優(yōu)化

代碼優(yōu)化解析:

1.我們并不希望在遍歷字符串的時候所有的值都被修改,包括我后續(xù)返回的地址,所以全部都可以用const修飾

2.當我第二個字符串為空的時候,返回字符串1的地址,就相當于你讓我在一個字符串里找什么都沒有的東西,庫里設計是返回第一個字符串地址

3.我們不希望改變原有的地址,str1,和str2,所以再創(chuàng)建一個指針變量用來代替上述str1的使用?

const char* my_strstr(const char* str1, const char* str2)
{
	assert(str1 && str2);
	const char* cp = str1;
	const char* s1 = NULL;
	const char* s2 = NULL;

	if (*str2 == '\0')
	{
		return str1;
	}

	while (*cp)
	{
		s1 = cp;
		s2 = str2;
		while (*s1 == *s2 && *s1 != '\0' && *s2 != '\0')
		{
			s1++;
			s2++;
		}
		if (*s2 == '\0')
		{
			return cp;
		}
		cp++;
	}
	return NULL;
}

根據(jù)測試用例跑出來的結果如下:?

??【C語言】長篇詳解,字符系列篇3-----strstr,strtok,strerror字符串函數(shù)的使用【圖文詳解?】,C語言,c語言,開發(fā)語言

二、strtok

了解strtok函數(shù)之前,我們要先了解一個概念,相信大家都看過IP地址, 計算機網(wǎng)絡通信協(xié)議是用的IP協(xié)議,于是鏈接進互聯(lián)網(wǎng)的設備會有一個IP地址,這個IP地址,IP地址通常用“點分十進制”表示成(a.b.c.d)的形式

例如:192.168.1.23

?IP地址的本質還是一個整數(shù),因為不好記,才有了點分十進制的表示方式。

那如果我們想把這個IP地址的每個數(shù)字取出來就會用到,strtok這個函數(shù)。又或者你想把郵箱的域名,郵箱名,域名后綴取出來也會用到strtok這個函數(shù)。其中@和.這種東西我們就把它稱作分隔符

strtok網(wǎng)站以及函數(shù)原型如下:

strtok - C++ Reference (cplusplus.com)

char * strtok ( char * str, const char * delimiters );

?strtok的函數(shù)介紹:

??【C語言】長篇詳解,字符系列篇3-----strstr,strtok,strerror字符串函數(shù)的使用【圖文詳解?】,C語言,c語言,開發(fā)語言

返回值和使用案例:?

?【C語言】長篇詳解,字符系列篇3-----strstr,strtok,strerror字符串函數(shù)的使用【圖文詳解?】,C語言,c語言,開發(fā)語言

strtok的使用

#include<stdio.h>
#include<string.h>

int main()
{
	char str1[] = "hello.CIL.MY@23";
	char buf[60] = { 0 };
	strcpy(buf, str1);
	char* p = ".@";
	char* r = NULL;
	for (r = strtok(buf, p); r != NULL; r = strtok(NULL, p))
	{
		printf("%s", r);
	}

	return 0;
}

打印結果如下:

?【C語言】長篇詳解,字符系列篇3-----strstr,strtok,strerror字符串函數(shù)的使用【圖文詳解?】,C語言,c語言,開發(fā)語言

?strtok總結:

? ? ?sep參數(shù)指向?個字符串,定義了用作分隔符的字符集合
? ? ?第?個參數(shù)指定?個字符串,它包含了0個或者多個由sep字符串中?個或者多個分隔符分割的標記
? ? ?strtok函數(shù)找到str中的下?個標記,并將其用\0 結尾,返回?個指向這個標記的指針。(注: strtok函數(shù)會改變被操作的字符串,所以在使?strtok函數(shù)切分的字符串?般都是臨時拷貝的內容并且可修改。)
? ? ?strtok函數(shù)的第?個參數(shù)不為NULL ,函數(shù)將找到str中第?個標記,strtok函數(shù)將保存它在字符串中的位置。
? ? ?strtok函數(shù)的第?個參數(shù)為NULL ,函數(shù)將在同?個字符串中被保存的位置開始,查找下?個標記。
? ? ?如果字符串中不存在更多的標記,則返回NULL 指針。

三、strerror

strerror 的網(wǎng)址:

strerror - C++ Reference (cplusplus.com)?

函數(shù)原型:

char * strerror ( int errnum );

函數(shù)介紹如下:?

?【C語言】長篇詳解,字符系列篇3-----strstr,strtok,strerror字符串函數(shù)的使用【圖文詳解?】,C語言,c語言,開發(fā)語言

函數(shù)的功能及使用案例:

?【C語言】長篇詳解,字符系列篇3-----strstr,strtok,strerror字符串函數(shù)的使用【圖文詳解?】,C語言,c語言,開發(fā)語言

?函數(shù)解析:

strerror是一個返回錯誤碼所對應的錯誤字符串的起始地址,在C語言的庫函數(shù)中設計錯誤碼,當我們庫函數(shù)在調用過程中發(fā)生錯誤信息了,要記錄下來,這就是錯誤碼。是一個編碼。

當庫函數(shù)調用失敗的時候,會將錯誤碼記錄到變量errno當中,errno是C語言中的一個全局變量。

strerror的使用

int main()
{
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		printf("%d:%s \n",i,strerror(i));
	}

	return 0;
}

?結果如下:

?【C語言】長篇詳解,字符系列篇3-----strstr,strtok,strerror字符串函數(shù)的使用【圖文詳解?】,C語言,c語言,開發(fā)語言?文章來源地址http://www.zghlxwxcb.cn/news/detail-836003.html

到了這里,關于?【C語言】長篇詳解,字符系列篇3-----strstr,strtok,strerror字符串函數(shù)的使用【圖文詳解?】的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • C語言sscanf,strstr和strtok函數(shù)用于字符提取分割

    sscanf函數(shù)(提取字符): 從輸入字符串的左邊開始往右匹配,遇到不符合匹配規(guī)則時則結束匹配。注意是遇到不符合描述規(guī)則時就結束,而不是從整個字符串中提取出符合規(guī)則的部分。 字符串格式描述說明: 代碼示例: \\\"%04d%02d%02d\\\"是用來解析字符串的格式,%表示格式轉換的

    2024年01月16日
    瀏覽(16)
  • C語言 字符串解析strchr/strrchr/strtok//strtok_r函數(shù)使用

    C語言 字符串解析strchr/strrchr/strtok//strtok_r函數(shù)使用

    在程序中,解析用戶輸入的參數(shù)(命令行參數(shù))是很常見的操作,本文將講解C語言中常見的一些解析字符串函數(shù)使用方法。 1 strchr 1.1 描述 strchr() 用于查找字符串中的一個字符,并返回該字符在字符串中第一次出現(xiàn)的位置。其原型定義在頭文件 string.h 中。 char *strchr(const ch

    2024年02月03日
    瀏覽(19)
  • C語言中的strtok()函數(shù)進行字符串分割

    C語言中的strtok()函數(shù)進行字符串分割

    引言 ????????在處理文本或字符串數(shù)據(jù)時,我們常常需要將一長串連續(xù)的字符按照特定的分隔符分解成一個個獨立的子串。C語言中提供了一個非常實用的庫函數(shù)—— strtok() ,用于實現(xiàn)這一功能。本文將通過一段示例代碼詳細解析并演示如何使用 strtok() 函數(shù)進行字符串分

    2024年01月23日
    瀏覽(27)
  • 【C語言】字符串函數(shù)strcpy&&strcat&&strcmp&&strstr的使?和模擬實現(xiàn)

    【C語言】字符串函數(shù)strcpy&&strcat&&strcmp&&strstr的使?和模擬實現(xiàn)

    ??個人主頁 : @啊森要自信的主頁 ?? 真正相信奇跡的家伙,本身和奇跡一樣了不起??! 歡迎大家關注??點贊??收藏??留言??希望看完我的文章對你有小小的幫助,如有錯誤,可以指出,讓我們一起探討學習交流,一起加油鴨。 記上節(jié),我們學了字符串 strlen 的使用和

    2024年02月05日
    瀏覽(21)
  • 代碼隨想錄day9|實現(xiàn)strStr()、重復的子字符串

    代碼隨想錄day9|實現(xiàn)strStr()、重復的子字符串

    一般的字符串匹配問題我們可以使用KMP算法來處理,當我們搜索文本串和模式串是否匹配的時候,我們先得到模式串的一個前綴表,其中前綴表中存放的內容是模式串的最長相等前后綴。例如文本串為:aabaabaafa,模式串為:aabaaf,那么文本串的前綴表就是010120。當我們開始搜

    2024年02月15日
    瀏覽(98)
  • Leecode找出字符串中第一個匹配項的下標 即實現(xiàn)strSTR()函數(shù)

    Leecode找出字符串中第一個匹配項的下標 即實現(xiàn)strSTR()函數(shù)

    目錄 簡單介紹該函數(shù)的作用 ? ? ? ? 在我們去用查找微信或者qq聊天記錄的時候,我們總不能一句一句去找吧。我們需要用到的功能底層大概是此博客所講的這個函數(shù)熬。 一.算法需要傳入的參數(shù)和返回類型 ? ? ? ? 需要傳入的就是和所有的文本,返回的是當前

    2024年02月12日
    瀏覽(98)
  • C語言學習系列-->字符函數(shù)和字符串函數(shù)

    C語言學習系列-->字符函數(shù)和字符串函數(shù)

    包含頭文件: 函數(shù) 如果它的參數(shù)復合下列條件就返回真(一個非零數(shù)字) iscntrl 任何控制字符 任何控制字符 空白字符:空格’ ‘,換頁’f’,換行’n’,回車’r’,制表符’t’或者垂直制表符’v’ isdigit 十進制數(shù)字0~9 isxdigit 十六進制數(shù)字,包括所有十進制數(shù)字,小

    2024年02月09日
    瀏覽(19)
  • C語言字符函數(shù)和字符串函數(shù)詳解

    C語言字符函數(shù)和字符串函數(shù)詳解

    ? ? ? ?Hello, 大家好,我是一代,今天給大家?guī)碛嘘P字符函數(shù)和字符串函數(shù)的有關知識 ? ? ? ?所屬專欄:C語言 ? ? ? ?創(chuàng)作不易,望得到各位佬們的互三呦 在C語言中有一些函數(shù)是專門為字符設計的,這些函數(shù)的使用都需要包含一個頭文件ctype.h 如:(注:以下函數(shù)原型都

    2024年03月20日
    瀏覽(33)
  • C語言——詳解字符函數(shù)和字符串函數(shù)(一)

    C語言——詳解字符函數(shù)和字符串函數(shù)(一)

    Hi,鐵子們好呀!今天博主來給大家更一篇C語言的字符函數(shù)和字符串函數(shù)~ 具體講的內容如下: 前言: 在編程的過程中,我們經(jīng)常要處理字符和字符串,C語言標準庫中提供了一系列庫函數(shù),接下來我們就學習一下這些函數(shù)。 眾所周知,C語言中提供了一系列的字符函數(shù),這些

    2024年03月17日
    瀏覽(25)
  • C語言——詳解字符函數(shù)和字符串函數(shù)(二)

    C語言——詳解字符函數(shù)和字符串函數(shù)(二)

    Hi,鐵子們好呀!之前博主給大家簡單地介紹了部分 字符和字符串函數(shù) ,那么這次,博主將會把這些字符串函數(shù)給大家依次講完! 今天講的具體內容如下: 6.1.1 strcmp 函數(shù)介紹 它的函數(shù)原型如下: 具體的函數(shù)介紹如下圖所示: 從圖中我們得知: - 如果第一個字符串 PTR1 大于

    2024年04月10日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包