[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 個空間給它。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include<iostream> | |
#include<string> | |
#include<algorithm> | |
using namespace std; | |
int main() | |
{ | |
string s = "How are You"; | |
/*transform 是定義在 algorithm 中的,記得要 #include<algorithm> | |
*transform 會掃描 s 的每個字元,並針對每個字元呼叫 tolower 函式。 | |
*tolower 函式會把每個字元轉成小寫。 | |
*/ | |
transform(s.begin(), s.end(), s.begin(), tolower); | |
cout << s << endl; | |
} |
transform 函式有許多種版本,這兒介紹最簡單的一種。
transform 會掃描字串,掃描的範圍由第 1 及第 2 個參數來決定。在這個例子中,transform 會由字串的開頭(s.begin()),一直掃描到字串的結尾(s.end())。
在掃描時,transform 每掃到一個字元,就會呼叫 tolower 函式(即第 4 個參數)。tolower 函式會讀入對應的字元,轉換為小寫,再回傳回去。
至於第 3 個參數的作用,則決定了 transform 函式「輸出」的位置。在這個例子中,transform 函式會把轉成小寫的字元,由 s 的開頭再次回寫回去。
第 3 個參數的作用比較不好解釋,我們再用底下的例子加以說明。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include<iostream> | |
#include<algorithm> | |
#include<vector> | |
using namespace std; | |
int doubleInt(int v) | |
{ | |
return v * 2; | |
} | |
int main() | |
{ | |
vector<int> buf; | |
buf.push_back(1); | |
buf.push_back(18); | |
buf.push_back(3); | |
buf.push_back(33); | |
buf.push_back(29); | |
//buf 的內容為 [1, 18, 3, 33, 29] | |
//buf1 的大小為 5 | |
vector<int> buf1(5); | |
transform(buf.begin(), buf.end(), buf1.begin(), doubleInt); | |
for (int i = 0; i < buf.size(); i++) | |
{ | |
cout << buf1[i] << " "; | |
} | |
return 0; | |
} | |
在這個例子中,我們想把 buf 中的每個元素都變成「2倍」,而且寫入到 buf1 中。
注意,我們是希望 buf 的內容不變,但 buf1 中的每個元素都是 buf 中每個元素的 2 倍!
我們呼叫了 transform 函式,由 buf 的開頭,掃描到 buf 的結尾,每掃描一個元素,就呼叫 doubleInt 這個自訂的函式。
transform 每把一個整數變成「2 倍」後,就會輸出。輸出的「目的」是由 buf1 的開頭(即 buf1.begin())開始,逐一的寫入整數。
在這個例子中,要確定 buf1 有足夠的空間,所以我們在第 19 行初始化 buf1 時,才會配置 5 個空間給它。
留言
張貼留言