(四十八)string類

2021-09-23 23:27:33 字數 3265 閱讀 3245

string類可以將字串視為輸入到乙個簡單變數中,像使用乙個變數那樣使用他。

前提是:使用標頭檔案#include

,另外,string類位於命名空間std中,因此需要使用using namespace std;或者std::string 或者using std::string。

在其他方面,又類似字串那樣使用。例如,在宣告並初始化的時候,需要給字串加上雙引號或者單引號,像 string abc="aaa"; 這樣。

上**:

#include#include//使用string類必須呼叫標頭檔案string

int main()

輸出結果:

請輸入乙個人的名字

a b請輸入第二個人的名字

cde請輸入第三個人的名字,姓和名之間**空格

f g h

第四個人名:

i jk

你知道麼?a b 很帥

再告訴你乙個秘密:cde 真的很帥

第三件事是:f g h 很厲害!

第四個人的名字是 i

第乙個人名字的第乙個字元是:a

第二個人的名字的第二個字元是d

string類的字元,可以通過陣列那樣的方式,來讀取其中第n個字元,並且輸入的數字為n=1

注意:

①我們可以發現,第四個人名i jk只顯示出字元i,而空格和jk則沒有被讀取。想要讀取空格,就需要像第三個人名那樣,使用函式getline(cin,string變數名)。

②雖然string型別可以像簡單變數那樣使用,但也可以被像字串(陣列)那樣讀取字串(陣列)中的第n個字元。讀取方式幾乎完全等同於讀取字串(陣列)中字元的方法。

③string型別在建立變數時,相對於字串(陣列)那樣需要標明長度的方式,顯得更安全可靠。而且可以自動根據實際輸入的字串長度調整自己的長度。例如在string abc;的時候,abc的字串長度為0,在string aaa="ab";的時候,字串的長度則為3(包括最後的空白字元)。

string類的賦值:

我們知道,當有兩個陣列aaa,bbb時,其中aaa已經被初始化,但是bbb不能通過賦值的方式,將aaa中的字串賦給陣列bbb,如bbb=aaa;這種方式是錯誤的。

但是當有兩個string型別的變數ccc和ddd時,假如ccc=;已被初始化,是可以通過賦值的方式,將ccc的字串賦給ddd,如ddd=ccc;cout<string類的相加:

也可以將兩個string型別的變數進行相加,並賦值給第三個string變數,後者將被加到前者的字串的後面。方法是:string變數c=string變數a+string變數b。

例如string ccc = ;string ddd = "efg";string eee = ccc + ddd;cout << eee;則輸出結果為abcefg(注意,中間沒有空格或者別的什麼)。

也可以直接將第二個string型別變數加到第乙個string後面,第乙個變數則為原來兩個變數拼合起來。方法是 目標string變數 += 被加的string變數。

例如: string ccc = ;string ddd = "efg";ccc += ddd;cout << ccc;輸出結果為abcefg

關於相加,第一種方式是相加的兩個變數沒有變化,第三個變數為相加兩個變數合起來之後的字串。第二種方式是被變的string變數沒有變數,目標string變數變化為兩個變數合併起來之後的字串。

上**:

#include#includeint main()

輸出結果為:

請輸入乙個妹子的名字:阿木

阿木很漂亮

阿木真的很漂亮

楊冪(人稱大冪冪)是乙個明星。

楊冪(人稱大冪冪)也很漂亮

在連續相加的時候:

aa += dd; //將變數dd加到變數aa的字串後面

aa += bb; //再將變數bb加到變數aa的字串後面

也可以直接通過這樣的一行**來起到相同的效果:

aa += dd += bb;

經過實際測試,兩者效果是等效的。

注意:

①string類有自動調節字串長度的功能。例如變數aa初始長度為0,在使用者輸入進行賦值後,字串為4個位元組(兩個漢字),其後進行兩次string變數相加,長度變為20個位元組,然後又在之後進行賦值,長度變成18個位元組(7個漢字2個括號每個佔2個位元組)。注意,sizeof 變數名是無法測出string類變數所佔空間的,他是動態分配的。

要想測試變數所佔空間,需要通過 變數名.size

() 這樣的方法來進行。如 string aa;cout << aa.size()<< endl; 就是輸出string變數aa的長度,結果為0。注意,這種方法不計算最後的空白符

②如果不是string類,而是c-風格的字串。

可以使用strcat(目標字串a,字串b)來將字串b的內容複製到字串a的後面;

另外是strcpy(目標字串a,字串b)可以將字串b全部複製到(即理解為賦值)到目標字串a之中。

但兩個存在的問題是可能因為長度超出,而導致資料損壞等問題。

在c函式庫裡,則是strncpy()和strncat()——多了乙個n,並且這兩個函式支援指出目標陣列的最大允許長度的第三個引數,因此更為安全(避免因資料溢位而導致資料損壞),但增加了程式輸入的複雜度。

總之,還是用string類好。

顯示字串的字元數:

在顯示字串的的字元數時,string類的字串和c-風格的字串的方法是不同的。注意, 顯示字元數 和 顯示字串長度 是不一樣的,後者比前者多乙個空字元。

①string類顯示字串的字元數的方法如下:變數名.size()。例如 cout << aa.size() << endl; //顯示string類字串的字元數,不包含末尾空字元,但包含空格字元

②顯示c-風格的字串的字元數的方法如下:strlen(變數名)。例如:

char aaa[5] = "abcd";

cout << strlen(aaa) << endl; //顯示c-風格字串的字元數

cout << sizeof(aaa) << endl; //顯示c-風格字串的字元長度,包含結尾空字元

輸出的結果分別為:4和5

演算法(四十八)

1 給你乙個鍊錶,每 k 個節點一組進行翻轉,請你返回翻轉後的鍊錶。k 是乙個正整數,它的值小於或等於鍊錶的長度。如果節點總數不是 k 的整數倍,那麼請將最後剩餘的節點保持原有順序。示例 給你這個鍊錶 1 2 3 4 5 當 k 2 時,應當返回 2 1 4 3 5 當 k 3 時,應當返回 3 2...

金陵四十八景

1 石城霽雪 清涼山石頭城上的雪景 2 鐘阜晴雲 紫金山上的雲景 3 鷺洲二水 江東門外白鷺村一帶的古白鷺洲,李白詩 二水中分白鷺洲 4 鳳凰三山 城西南露崗鳳凰台遺址上遠眺江邊的三山,李白詩 三山半落青天外 5 龍江夜雨 下關龍江邊夜聽雨聲 6 虎洞明曦 東南郊高橋門外黃龍山附近的虎中 黎明時的陽...

python四十八 多型

多型 物件如何通過他們共同的屬性和動作來操作及訪問,而不需要考慮他們具體的類。比如 字串和列表都有 len 方法 ss ssssss lt 1,2,3,4,5,6 print ss.len 等價於呼叫len 函式,len ss print lt.len 等價於呼叫len 函式,len lt clas...