C++ primer三章二节标准库类型string
生活随笔
收集整理的這篇文章主要介紹了
C++ primer三章二节标准库类型string
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
標準庫類型string
- 標準庫類型string表示可變長的字符序列,使用#include<string>引入頭文件,string定義在命名空間std中。
定義和初始化string對象
- 如何初始化類的對象是由類的本身決定的,類可以定義很多初始化對象的方式,但是這些方式之間必須有所不同,不同體現在初始值的數量、類型。
- 常用的初始化的例子
直接初始化和拷貝初始化
- = 拷貝初始化,將等號右側的初始值拷貝到新創建的對象中去
- 不使用等號,則執行的是直接初始化
string對象上的操作
- 一個類除了要規定初始化其對象的方式外,還要定義對象上所能執行的操作。
- 類既可以定義通過函數名字調用的操作,還可以定義<<、+等各種運算符在此類的對象上的新的含義。
讀寫string對象
- 讀取操作的時候,string對象會自動忽略開頭的空白(空格符、換行符、指標符),并從第一個真正的字符開始讀起,直到遇見下一處的空白為止。例如輸入“? ? ?Hello? ? ? ?”,接收的卻是“Hello”,輸出的結果中沒有空格。
- 多個輸入或者輸出可以連寫在一起。
讀寫未知數量的string對象
int main(int argc,char **argv){string word;while(cin >> word){cout << word << endl;}return 0; }使用getline讀取一行
- 保留輸入的時候的空白符號,使用getline()替代先前的>>運算符號
- getline只要一遇到換行符號就會結束讀取操作并且返回結果,即使一開始輸入的就是換行符號,那么返回的就是空字符串。
string的size操作
- size函數返回的是一個string::size_type類型的值,這是一個無符號類型的數值,而且可以存放下任何string對象的大小。在C++11中允許使用auto或者decltype來判斷變量的類型。
- 如果表達式已經有了size()函數既不要使用int了,可以避免混用int和unsigned可能帶來的問題。
比較string對象
- ==和!=分別校驗兩個對象相等還是不相等。相等是指兩個對象的長度和所蘊含的字符完全一致。
- < <= >= > 和先前的認知是一致的,比較區分大小寫,按照字典序來比
- 如果兩個字符一短一長,短的所有位數和長的先前位數是一致的,那么小的小于長的
- 如果在某些位置上面元素不一致,以第一對相異字符比較結果作為整體比較結果。
兩個string對象相加
- 這個 + 符號和Java是一樣的,默認是字符串的拼接
- 如果將string對象、字符字面值和字符串字面值混在一起使用,需要保障每一個加法運算符 + 的兩側的運算符對象至少有一個是string。
處理string對象中的字符
引入cctype頭文件就可以引入一些標準庫函數來處理字符
| isalnum(c) | c是字母或者數字為真 |
| isalpha(c) | c是字母為真 |
| iscntrl(c) | c是控制字符為真 |
| isdigit(c) | c是數字為真 |
| isgraph(c) | c不是空格但是可以打印的時候為真 |
| islower(c) | c是小寫字母為真 |
| isprint(c) | c可打印為真(c是空格或者c具有可見的形式) |
| ispunct(c) | c標點符號為真 |
| isspace(c) | c空白為真 |
| issupper(c) | c大寫字母為真 |
| isxdigit(c) | c是十六進制為真 |
| tolower(c) | 若c大寫,則轉化為小寫字母 |
| toupper(c) | 若c小寫,則轉化為大寫字母 |
- C++在兼容C語言的庫,去掉.h,在頭文件的名字前面增加字母c即可。
使用for來處理每一個字符
- 將每一個字符改成小寫
- ?處理特定位置的字符:1,使用下標;2,使用迭代器
- 下標運算符號[] 接收的輸入值是string::size_type類型的數值,這個參數表示的是訪問字符的位置,返回的是該位置上字符的引用。字符對象的下標從0開始計算,最大的下標是s[s.size()-1]
補充知識
- decltype關鍵字用于查詢表達式的類型
- 詳細的參考鏈接地址?https://blog.csdn.net/caoshangpa/article/details/79129258
?
?
?
總結
以上是生活随笔為你收集整理的C++ primer三章二节标准库类型string的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 5000额度的信用卡有必要激活吗?两个问
- 下一篇: s3c2440移植MQTT