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

C++中的string庫函數(shù)常見函數(shù)的作用和使用方法

 更新時間:2022年04月24日 10:55:21   作者:C0425xjn_  
這篇文章主要介紹了C++中的string庫函數(shù)常見函數(shù)的作用和使用方法,庫函數(shù)的靈活應(yīng)用是程序員的一大重要技能,本文通過實例實例代碼給大家講解的非常詳細,需要的朋友可以參考下

??前言: string庫函數(shù)是什么

今天分享一下這幾天對string庫函數(shù)的一些認識和理解??。
string,中文就是字符串的意思。顧名思義,也就是說在這個庫函數(shù)頭文件中的函數(shù),都是用來處理和分析字符串的,對我們使用及研究字符串具有極大的意義。而在平時,我們對一些處理字符串的函數(shù)并不頻繁使用,導(dǎo)致當我們想要用到它時卻忘記了使用方法。
接下來,我將舉出string頭文件中幾個較為常見的函數(shù),總結(jié)他們的用法和記憶方法。

??正文

1.strlen函數(shù)

是什么?

strlen函數(shù)是string頭文件中最常見的一個函數(shù),用于求字符串的長度。 strlen英文全稱string length,既字符串長度,可以顧名思義地來記憶。

具體用法:

?這是從c++ reference上截取的介紹,strlen函數(shù)的用法就是向其傳入一個字符串數(shù)組的首元素地址,其返回值是字符的個數(shù)。

?演示代碼如下:

#include<string.h>
int main()
{
	char str[] = "abc";
	int len1 = strlen(str);
	int len2 = strlen("abc");
	printf("%d\n%d", len1,len2);

	return 0;
}

!!這里應(yīng)該注意的是,"abc"表示的也是一個字符串數(shù)組,其傳給strlen函數(shù)的是首元素地址。

運行結(jié)果:

??下面我們試著運行一下這個代碼:

#include<string.h>
int main()
{
	char str1[] = "abc";
	int len1 = strlen(str1);
	char str2[] = { 'a','b','c'};
	int len2 = strlen(str2);
	printf("%d\n%d", len1,len2);

	return 0;
}

運行結(jié)果:

?為什么這里的str2的長度會是13呢?乍一看不是abc三個元素,長度為3嗎?

這里需要補充一個知識點。在C語言中,系統(tǒng)會在字符串數(shù)組最后加上一個’\0’作為結(jié)束標志。而strlen函數(shù)的工作原理就是計算傳入數(shù)組 (首元素地址指針指向的數(shù)組)在’\0’之前的元素個數(shù),既該字符串長度。

而該代碼塊中所定義的str數(shù)組并不是一個字符串數(shù)組,因此’\0’的位置并不在最后一個元素后面,而是一個隨機的位置,strlen函數(shù)會一直計算長度直到遇見’\0’才停止工作并返回結(jié)果。
因此,strlen(str2)會返回一個隨機值,該值不代表該數(shù)組的長度。

通過調(diào)試驗證了str1字符串數(shù)組末端有一個’\0’而str2沒有。

2.strcpy函數(shù)

是什么?

strcpy,英文全稱copies strcpy,也是一個string頭文件中較為常見的函數(shù),用于將一個字符串的內(nèi)容復(fù)制到另一個數(shù)組中。

具體用法

(再次引用c++ reference中的描述,發(fā)現(xiàn)這種英文的工具網(wǎng)站的描述比中文的清晰地多)

?strcpy的使用方法是向其傳入兩個指針,前者是目標數(shù)組首元素地址指針,后者是原字符串數(shù)組地址指針,將原字符串數(shù)組(包括末尾結(jié)束標志’\0’)拷貝到目標數(shù)組中。若目標數(shù)組中本身具有元素,則根據(jù)原字符串數(shù)組的長度一一覆蓋。(?注意:為了防止數(shù)組溢出,目標數(shù)組長度應(yīng)大于原字符串數(shù)組。)

?演示代碼如下:

#include<string.h>
int main()
{
	char str1[] = "abcdefg";
	char str2[] = "123";
	strcpy(str1, str2);//str2==>str1
	printf("%s", str1);//打印拷貝處理后的str1

	return 0;
}

運行結(jié)果:

可見,str2的內(nèi)容完美地拷貝到str1中了。

通過調(diào)試可以發(fā)現(xiàn),str2的內(nèi)容覆蓋了str1前四個元素,而后面的元素依然存在。但是因為str2的’\0’也跟著拷貝過去了,所以在打印的時候,由于printf格式控制符是%s(既字符串類型),在遇到第一個’\0’時則認為它是字符串結(jié)束標志,結(jié)束打印。因此,打印出來的結(jié)果是字符串"123"。

3.strcmp函數(shù)

是什么?

strcmp函數(shù),英文全稱compares string(字符串比較), 既用于比較兩個字符串,那么這里是比較字符串的什么呢?這里的比較是這樣的:先比較兩個字符串的第一個字符的ASCII碼值(這里視為第一對字符),(下面的比較均是ASCII碼值的比較)如果第一個字符串的第一個字符大于第二個字符串的第一個字符,則返回1;反之,則返回-1;若兩個字符相等,則進行下一對字符的比較,直到出現(xiàn)有一對字符不同則返回相應(yīng)的值(1或-1)。若兩個字符串所有的字符都相同,則返回數(shù)字0。

具體用法:

傳入兩個指針,代表兩個字符串數(shù)組的首元素地址。

?演示代碼如下:

#include<string.h>
int main()
{
	char str1[20];
	char str2[20];
	scanf("%s%s", str1, str2);
	int ret=strcmp(str1, str2);
	switch (ret)
	{
	case 0:printf("str1=str2");break;
	case 1:printf("str1>str2");break;
	case -1:printf("str1<str2");break;
	}
	return 0;
}

運行結(jié)果:

 

可見,這里的比較和我們所描述的相一致。
?這里應(yīng)該注意,'\0’的ASCII碼是0,它與其他字符都小。

4.strcat函數(shù)

是什么?

(先介紹strcat)

strcat,英文全稱concatenates string(連接字符串),這里很容易理解,strcat函數(shù)就是用于連接兩個字符串的,那么它是如何連接的呢?接下來我將介紹一下它的具體用法。

具體用法

?如圖所示,使用strcat函數(shù)需向其傳入兩個指針,前者是目標數(shù)組首元素地址指針,后者是原字符串數(shù)組地址指針(與strcpy類似,只不過這里是將原字符串接到目標字符串后面)。傳參成功后,strcat會將原字符串的第一個字符覆蓋到目標字符串的’\0’位置,后面再接著原字符串剩下的全部字符,直到遇見’\0’后結(jié)束,保證了拼接后的字符串只有一個結(jié)束標志’\0’。

?演示代碼如下:

#include<string.h>
int main()
{
	char str1[5]="ab";
	strcat(str1, "cd");
	printf("%s\n", str1);

	char str2[5] = "ab";
	char str3[3] = "cd";
	strcat(str2, str3);
	printf("%s\n", str2);
	return 0;
}//原字符串可以用字符串數(shù)組也可以直接用字符串,結(jié)果相同

運行結(jié)果:

如果我們想讓拼接后的字符串更長,能不能修改一下原字符串實現(xiàn)呢?讓我們來試試看??

int main()
{
	char str1[5]="ab";
	strcat(str1, "cde");
	printf("%s\n", str1);
}

運行結(jié)果:

運行出錯,引發(fā)了異常,這是為什么呢?

??這里是因為發(fā)生了數(shù)組溢出,由于"cde"字符串加上’\0’有四個字符,而str1我們規(guī)定了長度為5,當"cde"拼接在str1后覆蓋了它的’\0’之后,拼接字符串一共有六個字符,超過了目標字符串str1的長度,無法容納拼接后的字符串,所以發(fā)生了錯誤。
?由此我們可得,在使用strcat函數(shù)時,要規(guī)定給目標字符串一個合適的長度,防止數(shù)組溢出。

5.兩個不太常用的string頭文件函數(shù)

strstr函數(shù)

strstr,英文全稱Locate substring,既定位子字符串。strstr的返回值比較特殊,它是通過傳入一個母字符串和一個子字符串,然后在母字符串中定位子字符串的位置,返回值為指向母字符串中第一次出現(xiàn)的子字符串中指定的整個字符串的指針。若子字符串不屬于母字符串的一部分,則返回空指針NULL。

?演示代碼如下:

#include<string.h>
int main()
{
	char str1[20]="I love you";
	char* p1 = strstr(str1, "you");
	char* p2 = strstr(str1, "me");
	printf("%s\n%s\n", p1,p2);

}

運行結(jié)果:

memset函數(shù)

memset函數(shù),英文全稱Fill block of memory,既填充內(nèi)存塊。memset的作用是將指針指向的內(nèi)存塊(這里可以認為是字符串)的第一個字節(jié)數(shù)設(shè)置為指定的值。

?演示代碼如下:

#include<string.h>
int main()
{
	char str[20]="I love you";
	memset(str, '-', 2);
	printf("%s\n", str);
	return 0;
}

運行結(jié)果:

顯而易見,其結(jié)果無非就是將兩個’-'填充到str字符串的前兩個位置。

??總結(jié)

????庫函數(shù)的靈活應(yīng)用是程序員的一大重要技能!在總結(jié)這篇文章的時候我發(fā)現(xiàn)自己的string庫函數(shù)以及其他庫函數(shù)仍有不了解的地方,需要不斷地查資料去了解??偨Y(jié)下來,鞏固了自己對這部分知識的掌握,也希望能為您帶來幫助,感謝支持!歡迎大佬雅正。

到此這篇關(guān)于C++中的string庫函數(shù)常見函數(shù)的作用和使用方法的文章就介紹到這了,更多相關(guān)c++ string庫函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解析C++中的5個存儲類的作用

    解析C++中的5個存儲類的作用

    這篇文章主要介紹了C++中的5個存儲類的作用,存儲類是管理對象的生存期、鏈接和內(nèi)存位置的類型說明符,需要的朋友可以參考下
    2016-05-05
  • 探討C++中不能聲明為虛函數(shù)的有哪些函數(shù)

    探討C++中不能聲明為虛函數(shù)的有哪些函數(shù)

    下面小編就為大家?guī)硪黄接慍++中不能聲明為虛函數(shù)的有哪些函數(shù)。希望對大家有所幫助。一起跟隨小編過來看看吧,祝大家游戲愉快哦
    2017-01-01
  • C語言模擬擲骰子游戲

    C語言模擬擲骰子游戲

    這篇文章介紹了C語言模擬擲骰子游戲的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。需要的朋友可以收藏下
    2021-11-11
  • 基于C++編寫一個鍵盤提示音程序

    基于C++編寫一個鍵盤提示音程序

    首先講一下思路,這次制作的小黑子相當于鍵盤提示音,輸入J,N,T,M,會發(fā)出“雞你太美”的聲音,連續(xù)按下JNTM則會發(fā)出“你干嘛啊,哎呦”的聲音,感興趣的可以了解一下
    2023-03-03
  • C語言數(shù)據(jù)結(jié)構(gòu)之棧和隊列的實現(xiàn)及應(yīng)用

    C語言數(shù)據(jù)結(jié)構(gòu)之棧和隊列的實現(xiàn)及應(yīng)用

    棧和隊列是一種數(shù)據(jù)結(jié)構(gòu),只規(guī)定了性質(zhì),并沒有規(guī)定實現(xiàn)方式。本文將以順序結(jié)構(gòu)實現(xiàn)棧,鏈表方式實現(xiàn)隊列,感興趣的小伙伴快跟隨小編一起學(xué)習(xí)一下吧
    2022-08-08
  • QT Creator+OpenCV實現(xiàn)圖像灰度化的示例代碼

    QT Creator+OpenCV實現(xiàn)圖像灰度化的示例代碼

    這篇文章主要為大家詳細介紹了QT如何利用Creator和OpenCV實現(xiàn)圖像灰度化效果,文中的示例代碼講解詳細,感興趣的小伙伴可以嘗試一下
    2022-12-12
  • c語言實現(xiàn)php的trim標簽

    c語言實現(xiàn)php的trim標簽

    本文給大家介紹的是使用C語言實現(xiàn)php的trim標簽功能的代碼,非常的實用,其主要作用是清除字符串開頭結(jié)尾除空白,有需要的小伙伴可以參考下。
    2016-01-01
  • C/C++實現(xiàn)日期計算器的示例代碼

    C/C++實現(xiàn)日期計算器的示例代碼

    本篇文章主要介紹了C/C++實現(xiàn)日期計算器的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • C語言遞歸應(yīng)用實現(xiàn)掃雷游戲

    C語言遞歸應(yīng)用實現(xiàn)掃雷游戲

    這篇文章主要為大家詳細介紹了C語言遞歸應(yīng)用實現(xiàn)掃雷游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • 深入分析C中不安全的sprintf與strcpy

    深入分析C中不安全的sprintf與strcpy

    本篇文章是對C中不安全的sprintf與strcpy函數(shù)的使用進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05

最新評論

敦化市| 宁夏| 泸定县| 青岛市| 叙永县| 依兰县| 湘阴县| 吉隆县| 镇康县| 前郭尔| 胶州市| 将乐县| 葵青区| 沈阳市| 库车县| 濮阳县| 旬邑县| 甘德县| 鞍山市| 高雄市| 沈丘县| 武宁县| 雷州市| 顺昌县| 扎囊县| 宿州市| 深泽县| 阜南县| 筠连县| 固安县| 万州区| 静海县| 峡江县| 乐至县| 江城| 阿克苏市| 内丘县| 祁门县| 塔河县| 惠东县| 新郑市|