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

C++字符數(shù)組、字符數(shù)組指針和string類

 更新時(shí)間:2022年03月11日 08:24:43   作者:機(jī)器學(xué)習(xí)入坑者  
這篇文章主要介紹了C++字符數(shù)組、字符數(shù)組指針和string類,string是一個(gè)類而不是基本數(shù)據(jù)類型,數(shù)組不含有處理函數(shù),下面更多詳細(xì)內(nèi)容,需要的小伙伴可以參考下面文章

C++中字符串的表示方式有很多種,根據(jù)自己目前掌握的有三種:

  • 字符數(shù)組;
  • 字符數(shù)組指針;
  • 標(biāo)準(zhǔn)庫string類;

上面幾種方式各有優(yōu)點(diǎn)和缺點(diǎn),按照自己的觀點(diǎn),如果處理的字符串的任務(wù)比較簡(jiǎn)單,則使用前兩種方法所占用內(nèi)存小,因而較為實(shí)用;如果需要進(jìn)行字符串拼接和比較等功能,則使用string類比較合適,因?yàn)樽址麛?shù)組不含有處理函數(shù)。

1、字符數(shù)組和字符數(shù)組的指針

定義字符數(shù)組即使用char類型,字符數(shù)組的聲明和初始化例子如下:

char duckWords[5] = "Eat";

給字符數(shù)組定義指針的語法如下,字符數(shù)組名依舊表示首地址:

char *pointerWords = duckWords;

字符數(shù)組和字符數(shù)組指針的使用方式,和普通數(shù)組與普通數(shù)組指針的使用方式完全相同:

printf("%c \n", duckWords[5]);
printf("%c \n", *pointerWords);

需要注意的是,字符串的以“\0”結(jié)尾,所以對(duì)于“Say it”這個(gè)字符串實(shí)際上含有7個(gè)字符,因?yàn)楸硎咀址Y(jié)尾標(biāo)志的”\0“是自動(dòng)添加的。此外,字符串創(chuàng)建含有多種語法,比較重要的一點(diǎn)是初始化時(shí)可以不指定數(shù)組長(zhǎng)度:

char duckName[6]={'D','a','v', 'i', 'd'};
char duckName[6]="David";
char duckName[] = "David";

2、標(biāo)準(zhǔn)庫string類

從面向?qū)ο蟮慕嵌瓤?,string類才是更符合字符串操作的。必須注意,string是一個(gè)類而不是基本數(shù)據(jù)類型。

string類的功能主要體現(xiàn)在下面三個(gè)發(fā)面:

  • 含有多個(gè)構(gòu)造函數(shù),所以能采用多種方式進(jìn)行初始化;
  • 包含眾多的重載操作符;
  • 多種用于字符串處理的成員函數(shù);

下面的第一個(gè)例子采用“+”運(yùn)算符進(jìn)行字符串拼接:

string duckName = "David";
string duckAge = " 12";
?string duckDescribe = duckName + duckAge;
?/// 需要使用string.c_str()才能輸出完整字符串
?printf("%s \n", duckDescribe.c_str());

第二個(gè)例子是使用string的成員函數(shù)length()進(jìn)行字符串長(zhǎng)度統(tǒng)計(jì):

string duckName = "David";
printf("%d \n", duckName.length());

當(dāng)然,string類重載的操作符和含有的成員函數(shù)還有很多,但是使用方法都是類似的,不屬于語法范疇,所以不做具體介紹。

3、補(bǔ)充

3.1C++自帶string類的常用方法

 ?#include<iostream>
? ?#include<string>
? ?using namespace std;
? ?
? ?int main()
? ?{
? ? ? ?string str1 = "hello";
? ? ? ?string* str2 = new string("hello");
? ? ? string str3 = "world";
?
? ? ?//獲取字符串長(zhǎng)度
? ? ?int length = str1.length();
? ? ?cout << "調(diào)用str.length()函數(shù)獲取字符串長(zhǎng)度:" << length << endl;
? ? ?cout << endl;
??
??
? ? ?//字符串連接
? ? ? string str4 = str1 + str3;
? ? ? cout << "字符串連接結(jié)果:" << str4 << endl;
? ? ? cout << endl;
??
??
? ? ? //字符串比較
? ? ? if (str1 < str3)
? ? ? ? ? cout << "字符串比較:" << "str1<str2" << endl;
? ? ? cout << endl;


? ? ? //獲取字符串的第一個(gè)字符
? ? ? string::const_iterator it = str1.begin();
? ? ? cout << *it << endl;
? ? ? cout << endl;
??
??
? ? ? //獲取字符串的最后一個(gè)字符
? ? ?it = str1.end();//end是指向最后一個(gè)字符后面的元素,而且不能輸出,所以cout << *it << endl;這樣輸出會(huì)報(bào)錯(cuò)
? ? ? it--;
? ? ? cout << *it << endl;
? ? ? cout << endl;
?
??
? ? //倒置串
? ? ?reverse(str1.begin(), str1.end());
? ?cout << "倒置串:" << str1 << endl;
? ? cout << endl;
?
? ? //字符串轉(zhuǎn)字符數(shù)組
? ? ?//不推薦的用法,但是需要了解
? ? string a = "abc123";
? ? ?const char *b;//這里必須為const char *,不能用char *,不然下一句會(huì)報(bào)錯(cuò)
? ? ?b = a.c_str();
? ? ?cout << "a:" << a << endl;
? ? ?cout << "b:" << b << endl;
? ? ?a = "asd456";
? ? ?cout << "a:" << a << endl;
? ? ?cout << "b:" << b << endl;
? ? ? //推薦用法
? ? ? string c = "abc123";
? ? ?char *d = new char[20];
? ? ? strcpy(d, c.c_str());//因?yàn)檫@里沒有直接賦值,所以指針類型可以不用const char *
? ? cout << "c:" << c << endl;
? ? ? cout << "d:" << d << endl;
? ? ?c = "asd456";
? ? ? cout << "c:" << c << endl;
? ? cout << "d:" << d << endl;
? ? cout << endl;

??
? ? ? //查找串
? ? ?//find-從指定位置起向后查找,直到串尾
? ? ? string st1("babbabab");
? ? cout << st1.find('a') << endl;//1,默認(rèn)從位置0(即第1個(gè)字符)開始查找
? ? ?cout << st1.find('a', 2) << endl;//4 ? 在st1中,從位置2(b,包括位置2)開始,查找a,返回首次匹配的位置
? ? ?cout << (st1.find('c', 0) == -1) << endl;//1?
? ? ? cout << (st1.find('c', 0) == 4294967295) << endl;//1 ? 兩句均輸出1,原因是計(jì)算機(jī)中-1和4294967295都表示為32個(gè)1(二進(jìn)制)
? ? ?string st2("aabcbcabcbabcc");
? ? ?str1 = "abc";
? ? ?cout << st2.find(str1, 2) << endl;//6,從st2的位置2(b)開始匹配,返回第一次成功匹配時(shí)匹配的串(abc)的首字符在st2中的位置,失敗返回-1
? ? ? cout << st2.find("abcdefg", 2, 3) << endl;//6 ? 取abcdefg得前3個(gè)字符(abc)參與匹配,相當(dāng)于st2.find("abc", 2)
?
? ? ? //rfind-從指定位置起向前查找,直到串首
? ? ?cout << st1.rfind('a', 7) << endl;//6
??
? ? ?//find_first_of-在源串中從位置pos起往后查找,只要在源串中遇到一個(gè)字符,該字符與目標(biāo)串中任意一個(gè)字符相同,就停止查找,返回該字符在源串中的位置;若匹配失敗,返回-1
? ? ? string str6("bcgjhikl");
? ? ?string str7("kghlj");
? ? ?cout << str6.find_first_of(str7, 0) << endl;//2,從str1的第0個(gè)字符b開始找,g與str2中的g匹配,停止查找,返回g在str1中的位置2
? ? ?
? ? ?//find_last_of-與find_first_of函數(shù)相似,只不過查找順序是從指定位置向前
? ? ?string str("abcdecg");
? ? ?cout << str.find_last_of("hjlywkcipn", 6) << endl;//5,從str的位置6(g)開始向前找,g不匹配,再找c,c匹配,停止查找,返回c在str中的位置5
? ? ?//find_first_not_of-在源串中從位置pos開始往后查找,只要在源串遇到一個(gè)字符,與目標(biāo)串中的任意字符都不相同,就停止查找,返回該字符在源串中的位置;若遍歷完整個(gè)源串,都找不到滿足條件的字符,則返回-1
? ? ?cout << str.find_first_not_of("kiajbvehfgmlc", 0) << endl;//3 ? 從源串str的位置0(a)開始查找,目標(biāo)串中有a,匹配,..,找d,目標(biāo)串中沒有d(不匹配),停止查找,返回d在str中的位置3
??
? ? ? //find_last_not_of-與find_first_not_of相似,只不過查找順序是從指定位置向前
? ? ?cout << str.find_last_not_of("kiajbvehfgmlc", 6) << endl;//3
?
? ? ?system("pause");
? ? ?return 0;
?
?}

 運(yùn)行結(jié)果:

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

相關(guān)文章

  • c++打印封裝每次打印前面加上時(shí)間戳問題

    c++打印封裝每次打印前面加上時(shí)間戳問題

    這篇文章主要介紹了c++打印封裝每次打印前面加上時(shí)間戳問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • c++ STL容器總結(jié)之:vertor與list的應(yīng)用

    c++ STL容器總結(jié)之:vertor與list的應(yīng)用

    本篇文章對(duì)c++中STL容器中的vertor與list的應(yīng)用進(jìn)行了詳細(xì)的分析解釋。需要的朋友參考下
    2013-05-05
  • C++實(shí)現(xiàn)屏幕截圖功能

    C++實(shí)現(xiàn)屏幕截圖功能

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)屏幕截圖功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • C語言中的strlen()和sizeof()對(duì)比分析

    C語言中的strlen()和sizeof()對(duì)比分析

    這篇文章主要介紹了C語言中的strlen()和sizeof()區(qū)別對(duì)比,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • C++中的四種類型轉(zhuǎn)換

    C++中的四種類型轉(zhuǎn)換

    類型轉(zhuǎn)換有c風(fēng)格的,當(dāng)然還有c++風(fēng)格的。c風(fēng)格的轉(zhuǎn)換的格式很簡(jiǎn)單(TYPE)EXPRESSION,但是c風(fēng)格的類型轉(zhuǎn)換有不少的缺點(diǎn),有的時(shí)候用c風(fēng)格的轉(zhuǎn)換是不合適的,因?yàn)樗梢栽谌我忸愋椭g轉(zhuǎn)換,
    2015-08-08
  • C++ deque容器的具體使用

    C++ deque容器的具體使用

    deque又稱雙端隊(duì)列容器。deque容器中存儲(chǔ)元素并不能保證所有元素都存儲(chǔ)到連續(xù)的內(nèi)存空間中,本文詳細(xì)的介紹了C++ deque容器的使用,感興趣的可以了解一下
    2021-05-05
  • C語言對(duì)數(shù)組元素進(jìn)行冒泡排序的實(shí)現(xiàn)

    C語言對(duì)數(shù)組元素進(jìn)行冒泡排序的實(shí)現(xiàn)

    這篇文章主要介紹了C語言對(duì)數(shù)組元素進(jìn)行冒泡排序的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • C++ 實(shí)現(xiàn)靜態(tài)單鏈表的實(shí)例

    C++ 實(shí)現(xiàn)靜態(tài)單鏈表的實(shí)例

    這篇文章主要介紹了C++ 實(shí)現(xiàn)靜態(tài)單鏈表的實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • 引用參數(shù)和傳值參數(shù)的區(qū)別深入解析

    引用參數(shù)和傳值參數(shù)的區(qū)別深入解析

    以下是對(duì)引用參數(shù)和傳值參數(shù)的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下
    2013-07-07
  • Qt6遠(yuǎn)程連接MySQL數(shù)據(jù)庫的簡(jiǎn)單易上手版

    Qt6遠(yuǎn)程連接MySQL數(shù)據(jù)庫的簡(jiǎn)單易上手版

    在Qt應(yīng)用程序里,可實(shí)現(xiàn)遠(yuǎn)程MySQL服務(wù)器的連接操作,本文就來介紹一下Qt6遠(yuǎn)程連接MySQL數(shù)據(jù)庫,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-11-11

最新評(píng)論

竹溪县| 营口市| 台北市| 和顺县| 延寿县| 宝应县| 印江| 昌乐县| 岳西县| 交城县| 普兰县| 台山市| 会同县| 益阳市| 宁安市| 改则县| 山东省| 西贡区| 汶川县| 文安县| 龙山县| 伽师县| 德州市| 仙居县| 吉隆县| 兴业县| 滁州市| 阳春市| 新乐市| 昌乐县| 平果县| 甘谷县| 烟台市| 浦县| 闽清县| 石棉县| 吉木萨尔县| 恩施市| 和硕县| 新竹县| 阳原县|