String_Split
MB MFC | MB STL | WC MFC | WC STL | ||
99103040 | 5714 | 0 | 20 | 0 | 70 |
99103036 | 14192 | 10 | 130 | 10 | 380 |
99103032 | 27636 | 10 | 400 | 20 | 1400 |
99103051 | 41128 | 20 | 900 | 20 | 3200 |
99103026 | 65388 | 50 | 2400 | 50 | 7200 |
単位は m sec
表では MFC と表現しているが,実際は CStringArray を利用している程度.
ちょっと意外だったのが,STL のコードで,UNICODE 版が MBCS 版の 3 倍以上になってしまっている.
STL を利用しているコードは以下の通り.
std::vector<tstring> String_Split (const tstring& str_,LPCTSTR sp=_T(" \r\n"))
{
std::vector<tstring> strAry ;
tstring str = str_ ;
{
tstring::size_type spPos = tstring::npos ;
while ((spPos=::String_FindFirstOf(str,sp)) != tstring::npos) {
if (str.empty()) { break ; }
TCHAR fc = str[0] ;
if (fc == _T(‘\"’) || fc == _T(‘\”)) { // "—" or ‘—‘
if ((spPos=::String__Find(str,fc,1)) == tstring::npos) {
break ;
}
if ((spPos = ::String_FindFirstOf(str,sp,spPos)) == tstring::npos) {
break ;
}
}
tstring splitS = str.substr(0,spPos) ;
strAry.push_back(splitS) ;
str = str.substr(spPos+1) ;
if (str.empty()) { break ; }
}
if (!str.empty()) {
strAry.push_back(str) ;
}
}
return strAry ;
}
String_Join も同様だが,MFC 版 StringArrayToLine1 の 1 割程度なので,このままとする.
MFC 版 StringArrayToString は十分速い.