這篇來談談字串的連結。
- 定義字串
- 初始化字串
- 連結字串與數字
- 存取字串元素
- 比較字串
- 搜尋字串
- 修改字串
- 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()
這邊可以參考官方元件查看詳細的型別。
沒有留言:
張貼留言