[C++] 使用 transform 函式將字串中的字元都轉成小寫

C++的字串函庫沒有提供將字元轉成大寫,或是小寫的功能,所以只能呼叫 algorithm 函式庫中的 transform 函式來完成。底下是個示範。



transform 函式有許多種版本,這兒介紹最簡單的一種。
transform 會掃描字串,掃描的範圍由第 1 及第 2 個參數來決定。在這個例子中,transform 會由字串的開頭(s.begin()),一直掃描到字串的結尾(s.end())。

在掃描時,transform 每掃到一個字元,就會呼叫 tolower 函式(即第 4 個參數)。tolower 函式會讀入對應的字元,轉換為小寫,再回傳回去。

至於第 3 個參數的作用,則決定了 transform 函式「輸出」的位置。在這個例子中,transform 函式會把轉成小寫的字元,由 s 的開頭再次回寫回去。

第 3 個參數的作用比較不好解釋,我們再用底下的例子加以說明。
在這個例子中,我們想把 buf 中的每個元素都變成「2倍」,而且寫入到 buf1 中。

注意,我們是希望 buf 的內容不變,但 buf1 中的每個元素都是 buf 中每個元素的 2 倍!

我們呼叫了 transform 函式,由 buf 的開頭,掃描到 buf 的結尾,每掃描一個元素,就呼叫 doubleInt 這個自訂的函式。

transform 每把一個整數變成「2 倍」後,就會輸出。輸出的「目的」是由 buf1 的開頭(即 buf1.begin())開始,逐一的寫入整數。

在這個例子中,要確定 buf1 有足夠的空間,所以我們在第 19 行初始化 buf1 時,才會配置 5 個空間給它。

留言

這個網誌中的熱門文章

由 Pandas 的 DataFrame 中取得資料

[程式設計] C++ 的字串切割

[C++]在 cin 後呼叫 getline 所遇到的問題