欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++常用字符串函數(shù)大全(2)

 更新時(shí)間:2021年11月03日 11:31:07   作者:梁唐  
這篇文章主要給大家分享的是C++常用字符串函數(shù)的大全,cstring.h庫(kù)即C語(yǔ)言中的string.h庫(kù),它是C語(yǔ)言中為字符串提供的標(biāo)準(zhǔn)庫(kù)。C++對(duì)此進(jìn)行了兼容,所以我們?cè)贑++當(dāng)中一樣可以使用,下面文章的詳細(xì)內(nèi)容,需要的朋友可以參考一下

1、cstring.h常用函數(shù)介紹

cstring.h庫(kù)即C語(yǔ)言中的string.h庫(kù),它是C語(yǔ)言中為字符串提供的標(biāo)準(zhǔn)庫(kù)。C++對(duì)此進(jìn)行了兼容,所以我們?cè)贑++當(dāng)中一樣可以使用。

這個(gè)庫(kù)當(dāng)中有大量的關(guān)于字符串操作的api,本文選擇了其中最常用的幾個(gè)進(jìn)行闡述。

2、strlen

由于編譯器是按照\(chéng)0的位置來(lái)確定字符串的結(jié)尾的,所以字符串的長(zhǎng)度并不等于數(shù)組的長(zhǎng)度。

我們可以使用strlen函數(shù)求得字符串的真實(shí)長(zhǎng)度:

char name[100] = "hello world";
cout << strlen(name) << endl;


比如我們這里用一個(gè)長(zhǎng)度為100的char數(shù)組存儲(chǔ)了“helloworld”字符串,當(dāng)我們使用strlen函數(shù)求它的實(shí)際長(zhǎng)度只有11。

3、strcat

strcat函數(shù)可以將兩個(gè)字符串進(jìn)行拼接,它的函數(shù)簽名為:

char *strcat(char *dest, const char *src)


我們可以看到它接受兩個(gè)參數(shù),一個(gè)是dest,一個(gè)是src,都是char*類型,返回的結(jié)果也為char *類型。在C++當(dāng)中,數(shù)組名是指向數(shù)組中第一個(gè)元素的常量指針。所以雖然簽名中寫(xiě)的參數(shù)是指針類型,但我們傳入數(shù)組名同樣可以。

我們傳入兩個(gè)字符串之后,strcat函數(shù)會(huì)將src字符串拼接在dest字符串末尾,并且返回指向拼接之后結(jié)果的指針。

所以下面兩種方式輸出結(jié)果得到的值是一樣的。

char name[100] = "hello world";
char level[100] = "concat test";

char *ret = strcat(name, level);
cout << ret << endl; // 方式1
cout << name << endl; // 方式2

4、strncat

strcat函數(shù)的變種,函數(shù)額外多接收一個(gè)參數(shù)控制拷貝src字符串的最大長(zhǎng)度。

char *strncat(char *dest, const char *src, size_t n)


我們使用剛才同樣的例子:

char name[100] = "hello world";
char level[100] = "concat test";

char *ret = strncat(name, level, 4);
cout << ret << endl;
cout << name << endl;


由于我們傳入了4,限制了level字符串拷貝的長(zhǎng)度,所以最終得到的結(jié)果為:hello worldconc。

5、strcpy

字符串拷貝函數(shù),可以將src字符串中的內(nèi)容復(fù)制到dest

char *strcpy(char *dest, const char *src)


使用方法和前面介紹的其他函數(shù)類似,有兩點(diǎn)需要注意。

如果dest字符串長(zhǎng)度不夠長(zhǎng),在編譯時(shí)不會(huì)報(bào)錯(cuò),但運(yùn)行時(shí)可能導(dǎo)致問(wèn)題。

char name[10] = "";
char level[100] = "concat test";

strcpy(name, level);
cout << name << endl;


上面這段代碼可以編譯運(yùn)行,但是運(yùn)行的時(shí)候終端會(huì)出現(xiàn)出錯(cuò)信息。


所以在使用strcpy的時(shí)候千萬(wàn)小心,一定要保證dest有足夠長(zhǎng)度。

如果dest中原本就有內(nèi)容,會(huì)被覆蓋。

char name[15] = "abc";
char level[100] = "concat test";

strcpy(name, level);
cout << name << endl;


運(yùn)行完strcpy之后,name中的內(nèi)容會(huì)被清空。

6、strncpy

strcpy加入長(zhǎng)度限制的版本,可額外多傳入一個(gè)參數(shù)n表示最多賦值n個(gè)字符。當(dāng)src長(zhǎng)度小于n時(shí),剩余部分將會(huì)使用空字節(jié)填充。

char *strncpy(char *dest, const char *src, size_t n)
char name[15] = "abc";
char level[100] = "concat test";

strncpy(name, level, 4);
cout << name << endl;

輸出結(jié)果為conc。

7、memset

字符串的批量設(shè)置函數(shù),可以將字符串批量設(shè)置成某一個(gè)字符。

void *memset(void *str, int c, size_t n)


int c表示要被設(shè)置的字符,size_t n表示設(shè)置的字符數(shù)量。

char name[15] = "abc";
char level[100] = "concat test";

memset(name, 'c', 10);
cout << name << endl;


上述代碼的運(yùn)行結(jié)果為10個(gè)c。

多說(shuō)一句,memset除了可以用來(lái)給字符串進(jìn)行批量設(shè)置之外也可以給int型的數(shù)組進(jìn)行批量設(shè)置。由于一個(gè)32位的int占據(jù)4個(gè)字節(jié),也就是4個(gè)字符長(zhǎng)度。所以使用memset進(jìn)行批量設(shè)置的時(shí)候,最終得到的結(jié)果將是4個(gè)傳入的int c拼接的結(jié)果。

int a[100];
memset(a, 1, sizeof a); // memset(a, 1, 400); 因?yàn)橐粋€(gè)int占據(jù)4個(gè)字節(jié)


我們這樣設(shè)置之后,a數(shù)組當(dāng)中的元素并不是1,而是0x01010101,轉(zhuǎn)成10進(jìn)制是16843009。

所以使用memset對(duì)int型數(shù)組進(jìn)行初始化一般只用3種操作:

// 1. 批量設(shè)置成0
memset(a, 0, sizeof a);
// 2. 批量設(shè)置成-1
memset(a, -1, sizeof a);
// 3. 批量設(shè)置成一個(gè)接近最大整數(shù)上限的值
memset(a, 0x7f, sizeof a);
memset(a, 0x3f, sizeof a);


關(guān)于memset使用的一些具體細(xì)節(jié)將在后續(xù)題解的實(shí)際問(wèn)題當(dāng)中再做詳細(xì)說(shuō)明。

8、memcpy

strcpy類似,從str2中復(fù)制N個(gè)字符到str1中。

void *memcpy(void *str1, const void *str2, size_t n)
char name[15] = "abc";
char level[100] = "concat test";

memcpy(name, level, 10);


9、strcmp

將兩個(gè)字符串按照字典順序進(jìn)行比較,對(duì)于字典序的順序定義為:兩個(gè)字符串自左向右逐個(gè)字符相比(按 ASCII 值大小相比較),直到出現(xiàn)不同的字符或遇 \0 為止。

int strcmp(const char *str1, const char *str2)


返回的結(jié)果為一個(gè)int,如果它小于0,說(shuō)明str1小于str2,如果它等于0,說(shuō)明兩者相等,如果大于0,說(shuō)明str1大于str2

char name[15] = "abc";
char level[100] = "abcd";

cout << strcmp(name, level) << endl;


運(yùn)行結(jié)果為-100,說(shuō)明name小于level。

10、strncmp

strcmp長(zhǎng)度限制版,可以額外接受一個(gè)數(shù)字n,表示最多比較長(zhǎng)度為n的字符。

int strncmp(const char *str1, const char *str2, size_t n)

11、strstr

char *strstr(const char *haystack, const char *needle)


haystack中搜索needle第一次出現(xiàn)的位置,返回指向該位置的指針。

char name[15] = "search-test";
char level[100] = "-";

char *ret = strstr(name, level);
cout << ret << endl;

運(yùn)行之后,屏幕輸出的結(jié)果為:

因?yàn)楫?dāng)我們使用cout輸出一個(gè)char *變量的時(shí)候,它會(huì)當(dāng)做是字符串進(jìn)行輸出,即一直輸出字符,直到遇見(jiàn)\0為止。

輸出的結(jié)果為-test,說(shuō)明我們通過(guò)strstr函數(shù)找到了“-”出現(xiàn)的位置,跳過(guò)了之前的內(nèi)容。

除了上文介紹的這些函數(shù)之外,cstring當(dāng)中還有很多其他的api,例如strtok,memmove等等,大家感興趣不妨去翻閱相關(guān)文檔,也許會(huì)有驚喜。

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

注:文章轉(zhuǎn)自微信公眾號(hào):Coder梁(ID:Coder_LT)

相關(guān)文章

  • fcntl函數(shù)的使用詳解

    fcntl函數(shù)的使用詳解

    本篇文章是對(duì)fcntl函數(shù)的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 在C++17中實(shí)現(xiàn)無(wú)鎖數(shù)據(jù)結(jié)構(gòu)的方法詳解

    在C++17中實(shí)現(xiàn)無(wú)鎖數(shù)據(jù)結(jié)構(gòu)的方法詳解

    在探索?C++17?中的無(wú)鎖數(shù)據(jù)結(jié)構(gòu)之前,我們首先需要理解無(wú)鎖編程的基本概念及其在現(xiàn)代軟件開(kāi)發(fā)中的重要性,在這個(gè)章節(jié)中,我們將深入探討無(wú)鎖編程的概念,以及它如何滿足人類對(duì)于更高效、更可靠軟件的本能需求,文中通過(guò)代碼示例介紹的非常詳細(xì),感興趣的朋友可以參考下
    2023-12-12
  • Qt自定義圖形實(shí)現(xiàn)拖拽效果

    Qt自定義圖形實(shí)現(xiàn)拖拽效果

    這篇文章主要為大家詳細(xì)介紹了Qt自定義圖形實(shí)現(xiàn)拖拽效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • Qt5.9實(shí)現(xiàn)簡(jiǎn)單復(fù)合圖形

    Qt5.9實(shí)現(xiàn)簡(jiǎn)單復(fù)合圖形

    這篇文章主要為大家詳細(xì)介紹了Qt5.9實(shí)現(xiàn)簡(jiǎn)單復(fù)合圖形,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • C++按位異或運(yùn)算符的使用介紹

    C++按位異或運(yùn)算符的使用介紹

    本篇文章對(duì)C++按位異或運(yùn)算符的使用進(jìn)行了詳細(xì)的分析介紹。需要的朋友參考下
    2013-05-05
  • C語(yǔ)言控制語(yǔ)句之 循環(huán)

    C語(yǔ)言控制語(yǔ)句之 循環(huán)

    C語(yǔ)言循環(huán)控制語(yǔ)句是一個(gè)基于C語(yǔ)言的編程語(yǔ)句,該語(yǔ)句主要有while循環(huán)語(yǔ)句、do-while循環(huán)語(yǔ)句和for循環(huán)語(yǔ)句來(lái)實(shí)現(xiàn)循環(huán)結(jié)構(gòu),今天通過(guò)本文給大家分享C控制語(yǔ)句的相關(guān)知識(shí),需要的朋友參考下吧
    2021-07-07
  • C++使用模板實(shí)現(xiàn)單鏈表

    C++使用模板實(shí)現(xiàn)單鏈表

    這篇文章主要為大家詳細(xì)介紹了C++使用模板實(shí)現(xiàn)單鏈表,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之判斷循環(huán)鏈表空與滿

    C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之判斷循環(huán)鏈表空與滿

    這篇文章主要介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之判斷循環(huán)鏈表空與滿的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • 詳解C++之函數(shù)重載

    詳解C++之函數(shù)重載

    這篇文章主要介紹了c++函數(shù)重載的相關(guān)知識(shí),文章講解的非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • C++實(shí)現(xiàn)簡(jiǎn)易計(jì)算器功能

    C++實(shí)現(xiàn)簡(jiǎn)易計(jì)算器功能

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)簡(jiǎn)易計(jì)算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01

最新評(píng)論