C++ STL中沒有類似Perl的split函數,必須自己寫一個。下面是從網上(http://stackoverflow.com/questions/236129/c-how-to-split-a-string)
轉帖的代碼及使用方法,還是挺管用的。另外,C的strtok()函數也可以實作類似功能。
void Tokenize(const string& str,
vector<string>& tokens,
const string& delimiters = " ")
{
// Skip delimiters at beginning.
string::size_type lastPos = str.find_first_not_of(delimiters, 0);
// Find first "non-delimiter".
string::size_type pos = str.find_first_of(delimiters, lastPos);
while (string::npos != pos || string::npos != lastPos)
{
// Found a token, add it to the vector.
tokens.push_back(str.substr(lastPos, pos - lastPos));
// Skip delimiters. Note the "not_of"
lastPos = str.find_first_not_of(delimiters, pos);
// Find next "non-delimiter"
pos = str.find_first_of(delimiters, lastPos);
}
}
The tokenizer can be used in this way:
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
vector<string> tokens;
string str("Split me up! Word1 Word2 Word3.");
Tokenize(str, tokens);
copy(tokens.begin(), tokens.end(), ostream_iterator<string>(cout, ", "));
}