久久精品国产亚洲高清|精品日韩中文乱码在线|亚洲va中文字幕无码久|伊人久久综合狼伊人久久|亚洲不卡av不卡一区二区|精品久久久久久久蜜臀AV|国产精品19久久久久久不卡|国产男女猛烈视频在线观看麻豆

千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機構(gòu)

手機站
千鋒教育

千鋒學(xué)習(xí)站 | 隨時隨地免費學(xué)

千鋒教育

掃一掃進入千鋒手機站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學(xué)習(xí)站小程序
隨時隨地免費學(xué)習(xí)課程

當(dāng)前位置:首頁  >  應(yīng)聘面試  >  物聯(lián)網(wǎng)面試題  > STL教程(三):C++ STL常用容器之string

STL教程(三):C++ STL常用容器之string

來源:千鋒教育
發(fā)布人:syq
時間: 2022-07-11 17:00:00 1657530000

  一、string本質(zhì)

  string是一個類,類似于java中的string類。利用string類可以定義其對應(yīng)的string對象。

  二、string產(chǎn)生原因

  C風(fēng)格字符串(以空字符結(jié)尾的字符數(shù)組)太過復(fù)雜難于掌握,不適合大程序的開發(fā),所以C++標(biāo)準(zhǔn)庫定義了一種string類,定義在頭文件。

  注意:

  ·要使用string類要引入庫

  ·string首字母s就是小寫,不要大寫,和java不一樣

  ·string封裝了很多實用的成員方法

  ·string封裝了char,管理這個字符串,是一個char型的容器。

  ·不用考慮內(nèi)存釋放和越界

  三、string容器的常用操作

  1、string構(gòu)造函數(shù)

string();//創(chuàng)建一個空的字符串 例如: string str; string(const string& str);//使用一個string對象初始化另一個string對象 string(const char* s);//使用字符串s初始化 string(int n, char c);//使用n個字符c初始化

  2、string基本賦值操作

string& operator=(const char* s);//char*類型字符串 賦值給當(dāng)前的字符串

string& operator=(const string &s);//把字符串s賦給當(dāng)前的字符串

string& operator=(char c);//字符賦值給當(dāng)前的字符串

string& assign(const char *s);//把字符串s賦給當(dāng)前的字符串

string& assign(const char *s, int n);//把字符串s的前n個字符賦給當(dāng)前的字符串

string& assign(const string &s);//把字符串s賦給當(dāng)前字符串

string& assign(int n, char c);//用n個字符c賦給當(dāng)前字符串

string& assign(const string &s, int start, int n);//將s從start開始n個字符賦值給字符 串

案例:

#include <iostream> #include <string> using namespace std; void test01() { 

//string(const char* s);//使用字符串s初始化

string str1("hello world"); 

cout<<str1<<endl; 

 

//string(int n, char c);//使用n個字符c初始化

string str2(5,'a'); 

cout<<str2<<endl; 

 

//string& operator=(const char* s);//char*類型字符串 賦值給當(dāng)前的字符串

string str3; 

str3 = "hello world"; 

 

string str4; 

str4 = str3; 

string str5; 

str5 ='H'; 

cout<<str3<<endl; 

cout<<str4<<endl; 

cout<<str5<<endl; 

 

string str6="hello wrold"; 

string str7; 

str7.assign(str6, 2, 3); 

cout<<str7<<endl; 

string str8; 

str8.assign("world", 4);

cout<<str8<<endl; }int main(){ 

test01() ;

return EXIT_SUCCESS; }

4

  3、string存取字符操作

char& operator[](int n);//通過[]方式取字符 char& at(int n);//通過at方法獲取字符

案例:

#include <iostream> #include <string> using namespace std; void test02() 

 { 

 string str1="hello world"; 

 cout<<str1[1]<<endl; 

 cout<<str1.at(1)<<endl; 

 

 str1[4]='H'; 

 str1.at(1)='E'; 

 cout<<str1<<endl; 

 

 //[] 訪問元素越界 不會拋出異常

 //at 訪問元素越界 會拋出異常

 try 

 { 

 //str1[1000]='H';

 str1.at(1000)='H'; 

 }

 catch(exception &e) 

 { 

cout<<e.what()<<endl; 

 } 

 cout<<"結(jié)束了"<<endl; 

 }int main(){ 

test02() ;

return EXIT_SUCCESS; }

5

  4、string拼接操作

string& operator+=(const string& str);//重載+=操作符

string& operator+=(const char* str);//重載+=操作符

string& operator+=(const char c);//重載+=操作符

string& append(const char *s);//把字符串s連接到當(dāng)前字符串結(jié)尾

string& append(const char *s, int n);//把字符串s的前n個字符連接到當(dāng)前字符串結(jié)尾

string& append(const string &s);//同operator+=()

string& append(const string &s, int pos, int n);//把字符串s中從pos開始的n個字符連接到 當(dāng)前字符串結(jié)尾

string& append(int n, char c);//在當(dāng)前字符串結(jié)尾添加n個字符c

  5、string查找和替換

int find(const string& str, int pos = 0) const; //查找str第一次出現(xiàn)位置,從pos開始查找 int find(const char* s, int pos = 0) const; //查找s第一次出現(xiàn)位置,從pos開始查找 int find(const char* s, int pos, int n) const; //從pos位置查找s的前n個字符第一次位置 int find(const char c, int pos = 0) const; //查找字符c第一次出現(xiàn)位置 int rfind(const string& str, int pos = npos) const;//查找str最后一次位置,從pos開始查找int rfind(const char* s, int pos = npos) const;//查找s最后一次出現(xiàn)位置,從pos開始查找 int rfind(const char* s, int pos, int n) const;//從pos查找s的前n個字符最后一次位置 int rfind(const char c, int pos = 0) const; //查找字符c最后一次出現(xiàn)位置

string& replace(int pos, int n, const string& str); //替換從pos開始n個字符為字符串

str string& replace(int pos, int n, const char* s); //替換從pos開始的n個字符為字符串s

  6、string比較操作

/*

compare函數(shù)在>時返回 1,<時返回 -1,==時返回 0。

比較區(qū)分大小寫,比較時參考字典順序,排越前面的越小。

大寫的A比小寫的a小。

*/int compare(const string &s) const;//與字符串s比較 int compare(const char *s) const;//與字符串s比較

  7、string子串

string substr(int pos = 0, int n = npos) const;//返回由pos開始的n個字符組成的字符串

  8、string插入和刪除操作

string& insert(int pos, const char* s); //插入字符串

string& insert(int pos, const string& str); //插入字符串

string& insert(int pos, int n, char c);//在指定位置插入n個字符c

string& erase(int pos, int n = npos);//刪除從Pos開始的n個字符

  9、string和c-style字符串轉(zhuǎn)換

//string 轉(zhuǎn) char*

string str = "itcast"; const char* cstr = str.c_str(); //char* 轉(zhuǎn) string char* s = "itcast";

string str(s);

案例:

#include <iostream> #include <string> using namespace std; 

 void test03() 

 { 

 string str1="hello"; 

 str1.insert(2,"haha");

 cout<<str1<<endl; 

 

 string str2="hello"; 

 str2.insert(2,3,'a'); 

 cout<<str2<<endl; 

 

 str2.erase(2,3); 

 cout<<str2<<endl; 

 cout<<str2.size()<<endl; 

 

 string str; 

 char *p = "hello"; 

 

 //char * 轉(zhuǎn) string (可以)

 str = p; 

 cout<<str<<endl; 

 

 string str5="hello"; 

 //string 轉(zhuǎn) char * (不可以)

 //const char *p1 = str5;//err

 const char *p1 = str5.c_str(); 

 cout<<p1<<endl; 

 }int main(){ 

test03() ;

return EXIT_SUCCESS; }

6

 

  在c++中存在一個從const char到string的隱式類型轉(zhuǎn)換,卻不存在從一個string對象到C_string的自動類 型轉(zhuǎn)換。對于string類型的字符串,可以通過c_str()函數(shù)返回string對象對應(yīng)的C_string. 通常,程序員在整個程序中應(yīng)堅持使用string類對象,直到必須將內(nèi)容轉(zhuǎn)化為char時才將其轉(zhuǎn)換為C_string.

  提示:為了修改string字符串的內(nèi)容,下標(biāo)操作符[]和at都會返回字符的引用。但當(dāng)字符串的內(nèi)存被重新分配之后,可能發(fā)生錯誤。

  更多關(guān)于物聯(lián)網(wǎng)培訓(xùn)的問題,歡迎咨詢千鋒教育在線名師。千鋒教育擁有多年IT培訓(xùn)服務(wù)經(jīng)驗,采用全程面授高品質(zhì)、高體驗培養(yǎng)模式,擁有國內(nèi)一體化教學(xué)管理及學(xué)員服務(wù),助力更多學(xué)員實現(xiàn)高薪夢想。

tags:
聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強師集結(jié),手把手帶你蛻變精英
請您保持通訊暢通,專屬學(xué)習(xí)老師24小時內(nèi)將與您1V1溝通
免費領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學(xué) 138****2860 剛剛成功領(lǐng)取
王同學(xué) 131****2015 剛剛成功領(lǐng)取
張同學(xué) 133****4652 剛剛成功領(lǐng)取
李同學(xué) 135****8607 剛剛成功領(lǐng)取
楊同學(xué) 132****5667 剛剛成功領(lǐng)取
岳同學(xué) 134****6652 剛剛成功領(lǐng)取
梁同學(xué) 157****2950 剛剛成功領(lǐng)取
劉同學(xué) 189****1015 剛剛成功領(lǐng)取
張同學(xué) 155****4678 剛剛成功領(lǐng)取
鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
董同學(xué) 138****2867 剛剛成功領(lǐng)取
周同學(xué) 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT
物聯(lián)網(wǎng)公司面試題:保障物聯(lián)網(wǎng)安全的措施有哪些?

題目:請談?wù)勀鷮ξ锫?lián)網(wǎng)安全的理解,以及在物聯(lián)網(wǎng)系統(tǒng)中保障安全性的措施。回答:物聯(lián)網(wǎng)安全是指在物聯(lián)網(wǎng)系統(tǒng)中保護設(shè)備、數(shù)據(jù)和通信免受未經(jīng)授...詳情>>

2023-07-26 11:59:27
物聯(lián)網(wǎng)中的邊緣計算是什么?請解釋其優(yōu)勢和應(yīng)用場景

答案:邊緣計算是一種將計算和數(shù)據(jù)處理能力移動到物聯(lián)網(wǎng)設(shè)備附近的計算模型。在邊緣計算中,數(shù)據(jù)的處理和分析發(fā)生在接近數(shù)據(jù)源的設(shè)備或邊緣節(jié)點...詳情>>

2023-07-18 14:15:00
可以介紹一下js的內(nèi)部Date對象功能嗎

提供了操作時間和日期的方法擁有一系列屬性和方法,可以用來獲取系統(tǒng)當(dāng)前時間或者設(shè)置 Date 對象中的時間 通過 getTime()方法可返回距 1970 年 ...詳情>>

2023-01-21 15:51:32
為什么需要三次握手,兩次不行嗎?

弄清這個問題,我們需要先弄明白三次握手的目的是什么,能不能只用兩次握手來達到同樣的目的?!〉谝淮挝帐郑嚎蛻舳税l(fā)送網(wǎng)絡(luò)包,服務(wù)端收到了。...詳情>>

2022-10-25 16:55:00
什么是半連接隊列?

服務(wù)器第一次收到客戶端的 SYN 之后,就會處于 SYN_RCVD 狀態(tài),此時雙方還沒有完全建立其連接,服務(wù)器會把此種狀態(tài)下請求連接放在一個隊列里,...詳情>>

2022-10-25 16:55:00
快速通道