用std::string做strtok

參考資料: stackoverflow

用std::string做strtok

由於C++的string type並不支援strtok的功能,所以如果想要將C++的string做切段,有以下幾種方法:

法1: 用istringstream

使用stringstream類別,使用方法就像C++風格的iostream一樣,只是這個stream不是stdin/stdout,也不是fstream,而是將string的內容倒入一個stream (因此不具有fd–待查證)。

將要切割的字串倒入stream以後,再用getline中的Delimiter參數做為切割標準即可
參考程式碼片段如下:

1
2
3
4
5
6
7
8
9
10
vector<string> split(const string& s, char delimiter){
vector<string> tokens;
string token;
istringstream tokenStream(s);
while (getline(tokenStream, token, delimiter)){
tokens.push_back(token);
}
return tokens;
}
// tokens vector裝的是切割完的string

法2: 先把string轉成char*以後再切割

參考資料
如果要將string轉換成char*,可以透過string.c_str()函數

這個方法其實不太推薦,他是把C++風格棄掉,強制使用strtok來處理字串
參考程式碼片段如下:

1
2
3
4
//given string str as a string needed to slice
char *dup = strdup(str.c_str());
token = strtok(dup, " ");
free(dup);