c++ 标准库类型string
標準庫類型string
string表示可變長的字符序列,使用string類型必須首先包含string頭文件。
文章目錄
- 一、定義和初始化string對象
- 二、操作string對象
- 三、處理string對象中的字符
一、定義和初始化string對象
如何初始化類的對象是由類本身決定的。
1.拷貝初始化:
使用=初始化一個變量,編譯器把等號右側的初始值拷貝到新創建的對象中去。
2.直接初始化:不使用=
string s1;//s1是一個空串,該string對象中沒有任何字符。 string s2(s1); string s2 = s1; string s3("value"); string s3 = "value";//這個字符串字面值,除了最后那個空字符以外,全部被拷貝到新建的s3對象中去。 string s4(n,'c');//string s4(6,'c');把s4初始化成,連續6個字符c組成的串。二、操作string對象
類除了規定初始化其對象,還能夠定義對象上能執行的方法。
類既可以通過函數名調用方法,也可以定義<<、+等各種運算符在該類對象上的新含義。
1.讀寫 string 對象
在使用cin執行讀取操作時,string對象會忽略開頭空白,從第一個字符開始,到下一個空白結束。
#include<iostream> #include<string> using namespace std; int main(){string s;cin>>s;cout<<s<<endl;return 0; } //輸入: hello world //輸出:hello2.讀取未知數量的 string 對象
string word; while(cin >> word)//沒遇到文件結束標記或者非法輸入,一直讀取cout << word << endl;3.使用 getline 讀取一整行
如果說在最終字符串中保留輸入時的空白,使用getline函數替代>>。
函數從給定的輸入流中讀取數據,直到遇到換行符為止(換行符也被讀進來了),然后把所讀的內容存放在string對象里(這里面不存在換行符)。
如果輸入一開始就是個換行符,那么所得結果是一個空string。
string line; getline(cin, line); cout << line << endl; //getline返回它的流參數,我們也能把getline的結果作為條件。 while(getline(cin, line))//每次讀一整行,直到文件末尾。cout << line << endl;4.string 的 empty 和 size 操作:
empty是string的一個成員函數,使用點操作符指明是那個對象執行了 empty 函數即可。
s.empty()s為空返回true,否則返回false。
while (getline(cin, line))//只輸出非空的行if(!line.empty())//如果line不為空則返回真。cout << line << endl;size函數返回string對象的長度(字符的個數)。
while (getline(cin, line))//只輸出超過80個字符的行if(line.size() > 80)cout << line << endl;size函數返回的是string::size_type類型的值,它是一個無符號類型的值,而且能夠存放下任何string對象的大小。
string s; cin>>s; auto len = s.size();//c++11允許通過auto來推斷變量類型 cout << len;5.字符串字面值和string是不同的類型。
使用+運算符,必須確保每個+的兩側的運算對象至少有一個是string。
//字面值和string對象相加: string s4 = s1 + ",";//正確 string s5 = "hello" + ",";//錯誤 string s6 = (s1 + ",") + "world";//正確,對string對象使用+運算符得到一個新的string對象。三、處理string對象中的字符
1.使用 范圍for(range for)語句處理每個字符
范圍for語句:遍歷給定序列中的每個元素并對序列中的每個值執行某種操作。
//語法形式: for (declaration : experssion)statement /* experssion: 一個對象,用于表示一個序列。 declaration: 定義一個變量,該變量用于訪問序列中的基礎元素。 statement: 對每個元素的操作。 */ string str("some words"); for (auto c : str)//對于str中的每一個字符。每次迭代,str的下一個字符被拷貝給c。cout << c << endl;//輸出當前字符并加一個換行符。改變某個字符的特性,利用cctype頭文件中的函數,進行相應判斷:
isdigit(c);//c是數字時為真。 isalpha(c);//c是字母時為真。 ispunct(c);//c是標點符號時為真,即c不是控制字符、數字、字母、可打印空白中的一種。 toupper(c);//如果c是小寫字母,輸出對應的大寫字母,否則原樣輸出c。 ... //還有很多,請查手冊。 string s("HELLO WORLD!!!"); decltype(s.size()) punct_cnt = 0;//punct_cnt類型和s.size類型相同。 for (auto c : s)if (ispunct(c))//對于s中每個字符,如果該字符是標點符號,將標點符號計數值加一。++punct_cnt; cout << punct_cnt<< " punctuation characters in " << s << endl;2.使用 范圍for 語句改變字符串中的字符
把循環變量定義成引用類型即可,使用引用作為循環控制變量時,這個變量被依次綁定到了序列的每個元素上。
string s("Hello World!!"); for(auto &c : s)c = toupper(c);//c是一個引用,因此賦值語句將改變s中字符的值。 cout << s << endl;//輸出:HELLO WORLD3.只處理一部分字符
訪問string 對象的單個字符有兩種方式,一種是用下標,另一種是用迭代器。這里先介紹通過下標的方法。
- string對象的下標必須>=0 而且 <s.size()。
- 如果下標是帶符號類型的值,將自動轉換成由 string::size_type 表達的無符號類型。
- 下標運算符[]接收的輸入參數是 string::size_type 類型的值,這個參數表示要訪問的字符的位置,返回值是該位置上字符的引用。
- 不管什么時候只要對string對象使用了下標,都要確認在那個位置上確實有值。
4.使用下標執行迭代:
for (decltype(s.size()) index = 0;index !=s.size() && != isspace(s[index]); ++index)s[index] = toupper(s[index]); //依次處理s中的字符,直至我們處理完全部字符或者遇到一個空白 //如果s是some thing,經過操作,s變成SOME thing這里使用了:index !=s.size() && != isspace(s[index])
c++語言規定,只有左側運算對象為真,才會檢查右側運算對象。因此只有在index達到s.size()之前,才會執行s[index],這樣確保index比s.size()小。
總結
以上是生活随笔為你收集整理的c++ 标准库类型string的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 启动 x,(1)linux启
- 下一篇: 注意力测试软件系统,儿童注意力训练评估软