类声明如下: #pragma once #include <atlstr.h> #include <vector> using namespace std; typedef vector<CString> CSpliteResult; class CExtendString : public CString { public: CExtendString(const WCHAR*); public: //分拆字符串 //"123,456,789" 结果是 "123","456","789" //",456,789" 结果是 "","456","789" //"123,456," 结果是 "123","456","" //",456," 结果是 "","456","" CSpliteResult Splite(WCHAR token) const; static CExtendString FromLPCSTR(const char *); static char * ToLPCSTR(const CExtendString& str); }; 主要实现函数: CExtendString::CExtendString(const WCHAR* lpcwtr) : CString(lpcwtr) { } CSpliteResult CExtendString::Splite(WCHAR token) const { CSpliteResult result; if(this->GetLength() != 0) { CExtendString temp(*this); int pos = temp.Find(token); while(pos >= 0) { if(pos == 0) { result.push_back(_T("")); } else { result.push_back(temp.Left(pos)); } temp.TrimLeft(temp.Left(pos+1)); pos = temp.Find(token); } if(temp.GetLength() >= 0) { result.push_back(temp); } } return result; } CExtendString CExtendString::FromLPCSTR(const char * str) { CA2W wtr(str); return CExtendString(wtr); } char * CExtendString::ToLPCSTR(const CExtendString& str) { CW2A sz(str); char* psz = (char*)malloc(strlen(sz)+1); strcpy(psz, sz); return psz; } 调用示例: int i = 0; CExtendString str; str = CExtendString::FromLPCSTR("123,456,789"); CSpliteResult result = str.Splite(_T(',')); //结果是 "123","456","789" for(i=0; i<result.size(); i++) { AfxMessageBox(result[i]); } str = CExtendString::FromLPCSTR(",456,789"); result = str.Splite(_T(',')); //结果是 "","456","789" str = CExtendString::FromLPCSTR("123,456,"); result = str.Splite(_T(',')); //结果是 "123","456","" str = CExtendString::FromLPCSTR(",456,"); result = str.Splite(_T(',')); //结果是 "","456",""