int split(const wstring& input,const wstring& separators, vector<wstring>& results, bool removeEmpty) { wstring::size_type prevPos = 0; wstring::size_type tempPos = 0; while(wstring::npos != (tempPos = input.find_first_of(separators, prevPos))) { if(tempPos > prevPos) results.push_back(input.substr(prevPos, tempPos - prevPos)); else if(!removeEmpty) results.push_back(_T("")); prevPos = tempPos + 1; } if(prevPos < input.length()) results.push_back(input.substr(prevPos, input.length() - prevPos)); else if(!removeEmpty) results.push_back(_T("")); return results.size(); } 为了支持removeEmpty参数,写复杂了点,想把最后循环外的一步操作写到循环内部好像内部的逻辑就太复杂了。 使用:vector<wstring> results; split(_T("a|b|c|de.f||h|"), _T("|."), results, true); /* results的内容为: a b c de f h */