string基本字符系列容器

二、string基本字符系列容器

簡介:C語言只提供了一個char類型來處理字符,而對于字符串,只能通過字符串數組來處理,顯得十分不方便。C++STL提供了string基本字符系列容器來處理字符串,可以把string理解為字符串類,它提供了添加、刪除、替換、查找和比較等豐富的方法。string對象的元素下標也是從0開始的。
其中vector< char >這樣的向量也可以處理字符串,但其功能比不上string。向量的元素類型可以是string,如vector< string >這樣的向量,實際上就類似于C語言中的字符串數組。使用string容器,需要在頭文件聲明, #include< string >。

函數方法總結:

1,從string對象尾部添加字符 采用 “+” 操作符
2,從string對象尾部追加字符串
?直接采用“+”操作符
?采用append()方法
3,給string對象插入字符 insert();
4,訪問string對象的元素,一般使用下標方法隨機訪問string對象的元素,下標是從0開始計數的;string對象的元素是一個字符(char)
5,刪除string對象的元素
?清空一個字符串,直接給它賦值為 空字符串 即可
?使用clear();方法刪除string對象的所有元素
?使用erase();方法刪除迭代器所指的那個元素或一個區間中的所有元素。
6,返回string對象的長度
?返回字符串的長度 length();
?返回字符串是否為空 empty();(bool類型)
7,替換string對象的字符 replace();
8,搜索string對象的元素或子串 find();
9,string對象的比較 compare(); (它比對方大返回1,相等返回0,小于對方返回-1)
10,反向排序string對象 reserve();
(使用reserve方法需要聲明頭文件 #include < algorithm>)
11,string對象作為vector向量的元素,類似于字符串數組
12,string類型的數字化處理
13,string對象與字符數組互操作
14,string對象與sscanf函數
15,string對象與數值相互轉換

1,string基本字符系列容器的一些基本操作
#include <iostream>
#include<string>
#include<stdio.h>//使用C語言中的scanf函數
using namespace std;int main()
{string s;   //創建一個空字符串對象s,其長度為0cout << s.length() << " ";cout << endl;string s1;s1="beyondwsq"; //直接給字符串對象s1賦值cout << s1 << " ";cout << endl;string s2;char ss2[100];//cin >> ss2;scanf("%s",&ss2);//scanf的輸入速度要比cin快得多,但是scanf是C語言的函數,不支持string對象,需要頭文件 #include<stdio.h>//手動輸入一個字符串到字符數組ss2里面s2=ss2;//將字符數組ss2里面的元素賦值給string類型的s2cout << s2 << " ";//輸出s2這個字符串cout << endl;return 0;
}
2,一些函數方法的使用
#include <iostream>
#include<string>
using namespace std;int main()
{//使用 + 操作符從string對象尾部追加字符串string s;s =s + 'a';s =s + 'b';s =s + 'c'; //不能簡寫成 s=+'c';  這樣的話只能輸出最后一個字符cout << s << " "; //這里若簡寫成 s=s+'...' 的話只能輸出最后一個字符,我也不知道為什么???cout << endl;//輸出結果:abc//使用 + 操作符從string對象尾部追加字符串string s1;s1 = s1 + "wsq";s1 = s1 + "1014";cout << s1 << " ";cout << endl;//輸出結果:wsq1014//采用append()方法從string對象尾部追加字符串string s2;s2.append("yy");s2.append("1202");cout << s2 << " ";cout << endl;//輸出結果:yy1210//采用insert()方法給string對象插入字符string s3;s3 = "787084934";string :: iterator it;  //定義迭代器it = s3.begin();    //迭代器位置為字符串首s3.insert(it+1,'Q');    //把字符'Q'插入到第二個字符的位置,即下標為1這個位置cout << s3 << " ";cout << endl;//輸出結果:7Q87084934//訪問string對象的元素string s4;s4 = "beyondwsq1014";cout << s4[0] << " ";   //輸出string對象s4的首元素cout <<endl;cout << s4[0]-'b' << " ";   //兩個相同的字符相減值為0cout <<endl;//輸出結果:b  0return 0;
}
3,刪除string對象的元素
#include <iostream>
#include<string>
using namespace std;int main()
{string s;s="beyondwsq1014";string :: iterator it = s.begin();  //定義迭代器it,指向字符串對象首元素s.erase(it+3);  //刪除下標為3的元素,即第4個源0cout << s << endl;//輸出結果為:beyndwsq1014s.erase(it,it+4);   // 刪除下標為[0~4)直接的所有元素,即 元素 beyncout << s << endl;//輸出結果為:dwsq1014//s="";   //清空字符串長度s.clear();  //清空字符串長度,這兩種方法效果一樣cout << s.length() <<" ";  //輸出字符串的長度cout << s.empty() <<endl;  //判斷字符串是否為空,若我為空,返回1;不為空返回0//輸出結果為:0 0return 0;
}
4,替換、搜索、比較string對象的元素
#include <iostream>
#include<string>
using namespace std;int main()
{//替換string對象的字符string s;s="beyondwsq1014";s.replace(3,4,"sole");  //從下標為3的元素開始,之后的連續的4個字符也就是下標為[3,6]的元素ondw,替換成“good”cout << s << endl;//輸出結果為:beysolesq104//搜索string對象的元素或子串string s1;s1 = "Never give up";cout << s1.find('e') << " ";    //查找第一個字符'e',返回其下標值cout << s1.find("up") <<" ";    //查找第一個字符串"up",返回第一個元素(u)的下標值cout << s1.find("are") <<endl;    //查找第一個字符串"are",返回其下標值,查找不到則返回4294967295//輸出結果:1 11 4294967295//string對象的比較string s2;s2 = "xi ha xi ha";cout  << s2.compare("xi") <<" ";    //前兩個元素一樣,但是s2的元素多,所以s2大,返回其他多余的元素的總個數,這里除了“xi”以外,還有9個元素,故返回9cout  << s2.compare("xi ha xi ha") <<" ";   //相等,返回0cout  << s2.compare("zz") <<endl;    //x沒有z大,故返回-1//輸出結果:9 0 -1return 0;
}
5,reserve反向排序string對象
#include <iostream>
#include<string>
#include<algorithm> //使用reverse函數方法需要聲明頭文件
using namespace std;int main()
{string s;s = "10141202";reverse(s.begin(),s.end()); //從string對象s的開始到結尾這個區間內,所以的元素進行反排序cout << s << " ";//輸出結果:20214101return 0;
}
6,string類型容器的其他功能
#include <iostream>
#include<stdio.h>
#include<string>
#include<vector>
#include<algorithm>
#include<stdio.h>   //這里要用到C語言中的scanf函數
using namespace std;int main()
{vector < string > v;v.push_back("hjj");v.push_back("xgz");v.push_back("ysrwsq");cout << v[0] <<" ";cout << v[1] <<" ";cout << v[2] <<endl;//輸出結果:hjj xqz ysrwsqcout << v[0][0] <<" ";cout << v[1][1] <<" ";cout << v[2][2] <<endl;//輸出結果:h j rcout << v[2].length() <<endl;//輸出結果:6//string類型的數字化處理//求一個整數各個位之和,例如12345   輸出結果為(1+2+3+4+5):15string s;s = "787084934";int sum=0;for(int i=0;i<s.length();i++){if(s[i] == '0') sum+=0;else if(s[i] == '1') sum+=1;else if(s[i] == '2') sum+=2;else if(s[i] == '3') sum+=3;else if(s[i] == '4') sum+=4;else if(s[i] == '5') sum+=5;else if(s[i] == '6') sum+=6;else if(s[i] == '7') sum+=7;else if(s[i] == '8') sum+=8;else if(s[i] == '9') sum+=9;}cout << sum <<endl;//輸出結果:50//string對象與字符數組互操作string s1;char ss1[100];scanf("%s",&ss1);s1=ss1;printf(s1.c_str());cout << endl;cout << ss1 <<endl;printf("%s",ss1);cout << endl;cout << s1 <<endl;cout << ss1 <<endl;printf("%s",ss1);cout << endl;//輸出結果:若111 則輸出111五次,每行一次return 0;
}
7,string對象與sscanf函數(可以把一個字符串按你需要的方式分離出子串,甚至是數字)
#include <iostream>
#include <string>
using namespace std;int main()
{string s1,s2,s3;char sa[50],sb[50],sc[50];sscanf("abc 123 sq ","%s %s %s",sa,sb,sc);s1=sa;s2=sb;s3=sc;cout << s1 <<" "<<s2 <<" "<<s3<<endl;cout << "Hello world!" << endl;return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/379745.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/379745.shtml
英文地址,請注明出處:http://en.pswp.cn/news/379745.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

正則表達式(一)

正則表達式概述 1.1什么是正則表達式&#xff1f; 正則表達式(Regular Expression)起源于人類神經系統的早期研究。神經生理學家Warren McCulloch和Walter Pitts研究出一種使用數學方式描述神經網絡的方法。1956年&#xff0c;數學家Stephen Kleene發表了一篇標題為“神經…

42.有“舍”才有“得”

大干世界&#xff0c;萬種誘惑&#xff0c;什么都想要&#xff0c;會累死你&#xff0c;該放就放&#xff0c;該舍就舍。人必須先有所舍&#xff0c;才能有所得&#xff0c;舍如同種子撒播出去&#xff0c;轉了一圈&#xff0c;又帶了一大群子子孫孫回來。“舍”永遠在“得”的…

Java StringBuilder codePointCount()方法與示例

StringBuilder類codePointCount()方法 (StringBuilder Class codePointCount() method) codePointCount() method is available in java.lang package. codePointCount()方法在java.lang包中可用。 codePointCount() method is used to count the number of Unicode code point…

FreeRTOS時間管理

在使用FreeRTOS的過程中&#xff0c;我們通常會在一個任務函數中使用延時函數對這個任務延時&#xff0c;當執行延時函數的時候就會進行任務切換&#xff0c;并且此任務就會進入阻塞太&#xff0c;直到延時完成&#xff0c;任務重新進入就緒態。延時函數舒屬于FreeRTOS的時間管…

set和multiset集合容器

三、①set集合容器 簡介&#xff1a;set集合的目的就是為了快速檢索。set集合容器實現了紅黑樹的平衡二叉檢索樹的數據結構。set集合里面不允許有重復的元素出現&#xff1b;使用set容器前&#xff0c;需要在程序的頭文件中聲明 #include < set >。 函數方法總結&#…

javascript獲取select的值全解

獲取顯示的漢字 document.getElementById("bigclass").options[window.document.getElementById("bigclass").selectedIndex].text 獲取數據庫中的id window.document.getElementById("bigclass").value 獲取select組分配的索引id window.docume…

Java File類void deleteOnExit()方法(帶示例)

文件類void deleteOnExit() (File Class void deleteOnExit()) This method is available in package java.io.File.deleteOnExit(). 軟件包java.io.File.deleteOnExit()中提供了此方法。 This method is used to delete the file or directory when the virtual machine termi…

FreeRTOS隊列

在實際應用中&#xff0c;我們會遇到一個任務或者中斷服務需要和另一個任務進行消息傳遞&#xff0c;FreeRTOS提供了隊列的機制來完成任務與任務、任務與中斷之間的消息傳遞。 0x01 隊列簡介 隊列是為了任務與任務、任務與中斷之間的通信而準備的&#xff0c;可以在任務與任務…

括號配對問題(C)

描述 現在&#xff0c;有一行括號序列&#xff0c;請你檢查這行括號是否配對。 輸入 第一行輸入一個數N&#xff08;0<N<100&#xff09;,表示有N組測試數據。后面的N行輸入多組輸入數據&#xff0c;每組輸入數據都是一個字符串S(S的長度小于10000&#xff0c;且S不是空串…

劇情介紹:“阿甘正傳”

阿甘是個智商只有75的低能兒。在學校里為了躲避別的孩子的欺侮&#xff0c;聽從一個朋友珍妮的話而開始“跑”。他跑著躲避別人的捉弄。在中學時&#xff0c;他為了躲避別人而跑進了一所學校的橄欖球場&#xff0c;就這樣跑進了大學。阿甘被破格錄取&#xff0c;并成了橄欖球巨…

java 方法 示例_Java集合syncedList()方法與示例

java 方法 示例集合類syncList()方法 (Collections Class synchronizedList() method) synchronizedList() method is available in java.util package. syncList()方法在java.util包中可用。 synchronizedList() method is used to return the synchronized view of the given…

FreeRTOS信號量---二值信號量

信號量可以用來進行資源管理和任務同步&#xff0c;FreeRTOS中信號量又分為二值信號量、計算型信號量、互斥信號量和遞歸互斥信號量。 0x01 二值信號量 二值信號量其實就是一個只有一個隊列項的隊列&#xff0c;這個特殊的隊列要么是滿的&#xff0c;要么是空的&#xff0c;任…

Linux 上 rpm包管理工具的基本使用

查詢是否安裝某個包&#xff1a;rpm -q 包名查詢所有已安裝的包&#xff1a;rpm -q a查詢未安裝包的文件信息&#xff1a;rpm -qilp 未安裝的包安裝包&#xff1a;rpm -i 包測試安裝包&#xff1a;rpm -i test 包刪除包&#xff1a;rpm -e 包名測試刪除包&#xff1a;rpm -e te…

ios 內存使用陷阱

在iphone開發過程中&#xff0c;代碼中的內存泄露我們很容易用內存檢測工具leaks 檢測出來&#xff0c;并一一改之&#xff0c;但有些是因為ios 的缺陷和用法上的錯誤&#xff0c;leaks 檢測工具并不能檢測出來&#xff0c;你只會看到大量的內存被使用&#xff0c;最后收到didR…

FreeRTOS軟件定時器

軟件定時器允許設置一段時間&#xff0c;當設置的時間達到后就執行指定的功能函數&#xff0c;被軟件定時器調用的功能函數叫做定時器的回調函數。軟件定時器的回調函數是在定時器服務任務中執行的&#xff0c;所以一定不能在回調函數中調用任何阻塞任務的API函數&#xff0c;比…

Java類class isAssignableFrom()方法及示例

類class isAssignableFrom()方法 (Class class isAssignableFrom() method) isAssignableFrom() method is available in java.lang package. isAssignableFrom()方法在java.lang包中可用。 isAssignableFrom() method is used to check whether the class or an interface den…

關于 列表實例

wss3.0工具中有個列表實例項目。此項目的作用是在自定義網站或自定義字段時使用默認值。也就是定義其默認的數據。 格式詳見微軟msdn&#xff1a;http://msdn.microsoft.com/zh-cn/library/ms478860.aspx轉載于:https://www.cnblogs.com/heavencloud/archive/2009/03/20/141793…

WP7之Application Bar控件

Microsoft.Phone.Shell命名空間中定義了ApplicationBar及其相關類&#xff08;ApplicationBarIconButton和ApplicationBarMenuItem&#xff09;&#xff0c;這些類派生自Object,并完全獨立于常規Silverlight編程中的DependencyObject,UIElement和FrameworkElement類層次結構。A…

TomCat使用以及端口號被占用的處理方法

一.HTTP協議 什么是HTTP協議 HTTP協議&#xff08;HyperText Transfer Protocol&#xff0c;超文本傳輸協議&#xff09;是因特網上應用最為廣泛的一種網絡傳輸協議&#xff0c;所有的WWW文件都必須遵守這個標準。 HTTP請求 HTTP響應 2.如何處理端口被占用 方法一&#xff…

FreeRTOS事件標志組

使用信號量來同步的話&#xff0c;任務只能與單個事務或任務進行同步&#xff0c;有時候某個任務可能會需要與多個事件或任務進行同步&#xff0c;此時信號量就無能為力了&#xff0c;FreeRTOS為此提供了一個可選的解決方法&#xff0c;那就是事件標志組。 0x01 事件標志組 事…