2022年7月26日 星期二

[C++] 深入使用string字串 (part 2)

 這篇來談談字串的連結。

  • 定義字串
  • 初始化字串
  • 連結字串與數字
  • 存取字串元素
  • 比較字串
  • 搜尋字串
  • 修改字串
  • string與vector
  • stringstream
  • 國際字元字串
  • 原始字串字面值

連結字串

透過 + 符號可以串來自串,這時就會生成一個新的字串物件,

但要特別注意的是下面這一句話,

"使用加號的兩邊運算元之中必須其中一個是字串型別"

不能夠兩個運算元都是字面值或字串物件以外的型別。

只要記得這個原則,那麼各種連結的情境都可以知道寫得是否正確。

來看一段簡單的範例:


上半部對一些字串元件進行初始化,

重點看紫色框框內的字串初始化內容,

可以看到每個 + 號的左右兩邊,其中一個一定是字串物件,

且加號是由左往右進行運算,

因此紫色框框內最先運算的是 word字串物件 與 "whippersnapper"字面值的相加,

依序往右邊加過來。

輸出結果如下:

成功將各個字串與字面值串聯起來。

那如果違背"使用加號的兩邊運算元之中必須其中一個是字串型別"原則呢?

如下:

這是無法編譯的。


如何解決字面值相加的問題

雖然我自己想不到什麼情況會遇到字面值相加的情境,

畢竟字面值都是你自己設定的啊!?

但還是提供以下提供五種方式解決字面值相加的問題。

第一種:自行將兩個字面值合併(我個人是覺得...這方法好像有點呆XD 但也最實際)

第二種:讓編譯器幫你合併(這招看起來厲害一點,但有誰會這樣寫?)

第三種:設定運算優先順序(因為右邊先運算,就會變成一個新的字串物件了)

第四種:使用初始化語法,把字面值變為string

第五種:較新的語法,將字面值變為string物件

直接在字面值的後方加上s,就可以把這個字面值當作是字串物件了,

要特別注意,記得加上命名空間才能使用。


使用+=來連結字串

直接看範例,sentence與sentence2都是相同的字串相加,

差別在sentence使用+=符號。

所以只要+=的觀念正確,其實就很容易理解這種情況下的運作模式。

結果如下:


使用append( )來連結字串

使用append()能夠將字面值串接在字串物件的最後面。

輸出結果:

append()也能夠加入一些參數,來做一點變化。

sentence4 使用 append(compliment , 3 , 22)

代表的是他只需要將compliment起始index 3 ,長度22的字面值串接到sentence4的尾巴去。

sentence4 使用 append( 3 , '!' )

代表的是將 3 個 '!' 字面值串接到sentence4的尾巴去。


連結字串與數字

上面介紹的都是字串物件與字串物件或字面值的連結,

那字串物件能夠與其他型別連結嗎?

答案是不能

字串物件只能與字串物件或字元、字面值連結,與其他型態連結會導致無法編譯。

如下,編譯器會告訴你錯誤:

但有些語言的編譯器甚至可以編譯下列程式碼:

JAVA與C#可以,因為會自動幫你隱形轉換成字串,但這也是比較危險的,

還是要自己主動轉換成正確的型別會比較安全。


在C++中,

必須自己明確地將這些值轉換成字串

最簡單的方式,就是使用 to_string() 將其他型別轉換成string物件。

輸出如下:

那如果要把字串轉成數字呢?

轉成int 可以使用 stoi(),

還有其他型態的數字,

例如:

stol()

stoll()

stoul()

stiull()

stif()

stod()

stold()

這邊可以參考官方元件查看詳細的型別。

沒有留言:

張貼留言

社會新鮮人如何投資?

我的觀點是,在 沒有很多 本錢 的情況下, 別寄望每個月幾千元放到股票或者最近很夯的高股息ETF就能讓你致富, 先投資自己,讓自己的本業收入提高吧。