2010年3月14日 星期日

strtok in C++

C++來實作類似strtok()的function

class StrTok : public vector<std::string> {
public:
StrTok(const string & strInput, const string & strDelim = " ,") {
string::size_type nHead, nTail;
nHead = strInput.find_first_not_of(strDelim, 0);
nTail = strInput.find_first_of(strDelim, nHead);

while(nHead != string::npos || nTail != string::npos) {
push_back(strInput.substr(nHead, nTail - nHead));
nHead = strInput.find_first_not_of(strDelim, nTail);
nTail = strInput.find_first_of(strDelim, nHead);
}
}
};

兩個參數,第一個參數為預切割的字串,第二個參數為切割的符號(預設為逗號),因為是繼承vector,所以可以直接用vector的function去存取切割後的字串。範例如下:

StrTok tok("howard, john");
for(StrTok::size_type i = 0; i < tok.size(); i++)
cout << tok[i];

沒有留言:

張貼留言