string型別介紹

平凡_h發表於2019-02-24

一、前言

int,float,char,C++標準庫提供的型別:string,vector。

string:可變長字串的處理;vector一種集合或者容器的概念。

二、string型別簡介

C++標準庫中的型別,代表一個可變長的字串

char str[100] = “I Love China”; // C語言用法

三、定義和初始化string物件

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

int main()
{
    string s1; // 預設初始化,s1=””,””空串,表示裡面沒有字元
    string s2 = “I Love China”; // 把I Love China 這個字串內容拷貝到了s2代表的一段記憶體中,拷貝時不包括末尾的 ;
    string s3(“I Love China”); // 與s2的效果一樣。
    string s4 = s2; // 將s2中的內容拷貝到s4所代表的的一段記憶體中。

    int num = 6;
    string s5 = (num,’a’);// 將s5初始化為連續num個字元的’a’,組成的字串,這種方式不太推薦,因為會在系統內部建立臨時物件。
    return 0;
}

 

四、string物件上的操作

(1)判斷是否為空empty(),返回的布林值

string s1;
if(s1.empty()) // 成立
{
    cout << “s1字串為空” <<endl;
}

(2)size()/length():返回位元組/字元數量,代表該字串的長度。unsigned int

string s1;
cout << s1.size() << endl; // 0
cout << s1.length() << endl; // 0
string s2 = “我愛中國”;
cout << s2.size() << endl;// 8
cout << s2.length() << endl; // 8
string s3 = “I Love China”;
cout << s3.size() << endl;// 12
cout << s3.length() << endl; // 12

(3)s[n]:返回s中的第n個字元,(n是個整型值),n代表的是一個位置,位置從0開始,到size()-1;

如果用下標n超過這個範圍的內容,或者本來是一個空字串,你用s[n]去訪問,都會產生不可預測的作用。

string s3 = “I Love China”;
if(s3.size()>4)
{
    cout << s3[4] << endl;
    s3[4] = ‘2’;
}
cout << s3 << endl; // I Lowe China

(4)s1+s2:字串的連線,返回連線之後結果,其實就是得到一個新的string物件。

string s4 = “abcd”;
string s5 = “efgk”
string s6 = s4 + s5;
cout << s6 <<endl;

(5)s1 = s2:字串物件賦值,用s2中的內容取代s1中的內容

string s4 = “abcd”;
string s5 = “efgk”
s5 = s4;
cout << s5 <<endl; // abcd

(6)s1 == s2:判斷兩個字串是否相等。大小寫敏感:也就是大小寫字元跟小寫字元是兩個不同的字元。相等:長度相同,字元全相同。

string s4 = “abcd”;
string s5 = “abcd”
if(s5 == s4)
{
  cout << “s4 == s5” <<endl; // abcd
}

(7)s1 != s2:判斷兩個字串是否不相等

string s4 = “abcd”;
string s5 = “abcD”
if(s5 != s4)
{
    cout << “s4 != s5” <<endl; // abcd
}

(8)s.c_str():返回一個字串s中的內容指標,返回一個指向正規C字串的指標常亮,也就是以 儲存。

這個函式的引入是為了與C語言相容,在C語言中沒有string型別,所以我們需要通過string物件的c_str()成員函式將string物件轉換為C語言的字串樣式。

string s4 = “abcd”;
const char *p = s4.c_str(); // abcd
char str[100];
strcpy_s(str,sizeof(str),p);
cout << str << endl;

string s11(str); // 用C語言的字串陣列初始化string型別。

(9)讀寫string物件

string s1;
cin >> s1; // 從鍵盤輸入
cout << s1 << endl;

(10)字面值和string相加

string str1 = “abc”;
string str2 = “def”;
string str3 = s1 + “ and ” + s2 + ‘e’; // 隱式型別轉換
cout << str3 << endl;  // abc and defe;
// string s1 = “abc” + “def”; // 語法上不允許

(11)範圍for針對string的使用:C++11提供了範圍for:能夠遍歷一個序列的每一個元素。string可以看成一個字元序列。

string s1 = “I Love China”;
for(auto c:s1) // auto:變數型別自動推斷
{
    cout << c << endl; // 每次輸出一個字元,換行
}

for(auto &c:s1) // auto:變數型別自動推斷
{
    // toupper()把小寫字元轉換為大寫,大寫字元不變
    c = toupper(c); // 因為c是一個引用,所以這相當於改變s1中的值
}
cout << s1 << endl;

 

相關文章