【C++深度剖析教程10】C++中的字符串类
首先我們看看C語言:
- C語言不支持真正意義上的字符串
- C語言用字符數(shù)組和一組函數(shù)實現(xiàn)字符串操作
- 語言不支持自定義類型,一次無法獲得字符串類型
從C到C++中的進化過程中引入了自定義類型
 在C++中,可以通過類完成字符串類型的定義
C++標準庫提供了string類型
- string類型直接支持字符串連接
- string類型直接支持字符串的大小比較
- string類型直接支持子串查找和提取
- string類型直接支持字符串的插入和替換
先來看一個程序,功能為:對多個字符串進行大小排序:
#include <iostream> #include <cstring>using namespace std;void string_sort(string a[], int len) {for(int i=0;i<len;i++){for(int j=i;j<len;j++){if (a[i] > a[j]){swap(a[i], a[j]);}}} }string string_add(string a[], int len) {string ret = "";for(int i=0;i<len;i++){ret += a[i] + ", ";}return ret; } int main() {string sa[7] = {"Hello World","D.T.Software","C#","Java","C++","Python","TypeScript"};string_sort(sa, 7);for(int i=0;i<7;i++){cout << sa[i] << endl;}cout << endl;cout << string_add(sa, 7) << endl;return 0; }運行結果為:
C# C++ D.T.Software Hello World Java Python TypeScriptC#, C++, D.T.Software, Hello World, Java, Python, TypeScript,
以上程序我們自己定義了一個字符串比較大小排序函數(shù),實現(xiàn)了讓多個字符串按照從大到小的順序排列的功能。
那么標準庫中還有什么關于字符串的操作呢?
- 字符串與數(shù)字的轉換是如何實現(xiàn)的? - 標準庫中提供了相關的類對字符串與數(shù)字進行轉換
- 字符串流類(sstream)用于string的轉換 - sstream -相關頭文件
- istringstream -字符串輸入流
- ostringstream -字符串輸出流
 
 
使用方法:
-  string->數(shù)字 istringstream iss("123.45");double num;iss >> num;
-  數(shù)字->string ostringstream oss;oss << 543.21;string s = oss.str();
直接看代碼實現(xiàn):
#include <iostream> #include <string> #include <sstream>using namespace std;#define TO_NUMBER(s, n) (istringstream(s) >> n) #define TO_STRING(n) (((ostringstream&)(ostringstream() << n)).str())int main() {double n = 0;if(TO_NUMBER("234.567", n)){cout << n << endl;} string s = TO_STRING(12345);cout << s << endl;return 0; }運行結果為:
234.567 12345上述代碼實現(xiàn)了字符串轉數(shù)字以及數(shù)字轉字符串。自己體會一下其是如何運用庫函數(shù)的。
下面我們來做一個面試題:
-  請實現(xiàn)一個字符串循環(huán)右移的程序 示例:abcdefg循環(huán)右移3位后得到efgabcd 
直接看程序是如何實現(xiàn)的:
include <iostream> #include <string>using namespace std;string operator >> (const string& s, unsigned int n) {string ret = "";unsigned int pos = 0;n = n % s.length(); //length這個函數(shù)返回字符串的長度,取余數(shù)代表不管移位是否超過字符串的長度,都可以操作,因為要求的是循環(huán)移位pos = s.length() - n; //獲取到移動的具體位置ret = s.substr(pos); // substr類的函數(shù),提取 pos位置之后的子串給retret += s.substr(0, pos); //提取從0到pos位置的子串再加到上一個子串后面return ret; }int main() {string s = "abcdefg";string r = (s >> 3);cout << r << endl;return 0; }運行結果為:
efgabcd以上程序,我們學到了更多的關于字符串的庫函數(shù),并且對操作符重載,更加的了解了。這只是開始,以后我們還會接觸跟多的庫函數(shù),學習到更多的關于C++的技術。
總結:
- 應用開發(fā)中大多數(shù)情況都在進行字符串的處理
- C++中沒有直接支持原生的字符串的類型
- 標準庫中通過string類型支持字符串的概念
- string類支持字符串和數(shù)字的相互轉換
- string類的應用使得問題的求解變得更加簡單
想一起探討以及獲得各種學習資源加我(有我博客中寫的代碼的原稿):
 qq:1126137994
 微信:liu1126137994
 可以共同交流關于嵌入式,操作系統(tǒng),C++語言,C語言,數(shù)據(jù)結構等技術問題。
總結
以上是生活随笔為你收集整理的【C++深度剖析教程10】C++中的字符串类的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: python环境搭建_Python开发环
- 下一篇: chrome浏览器设置思源黑体
