我想改组CString varible中出现的字符。我该怎么做? Std提供了一个名为random_shuffle()的finction,可用于以下列方式对std :: string进行shuffle std :: string s(“ThisIsSample”); random_shuffle(s.first(),s.last()); 但是因为CString没有函数来访问fisrt和last字符来迭代。我如何在CString中使用random_shuffle?
答案 0 :(得分:2)
使用GetBuffer
获取字符缓冲区,并将其边界传递给std::random_shuffle
:
void shuffle_cstring(CString& c)
{
size_t len = c.GetLength();
LPTSTR buf = c.GetBuffer(1);
std::random_shuffle(buf, buf + len);
c.ReleaseBuffer();
}
答案 1 :(得分:0)
转换CString to std::string:-
CString cs("Hello");
std::string s((LPCTSTR)cs);
NOTE:- BUT: std::string cannot always construct from a LPCTSTR. i.e. the code
will fail for UNICODE builds.
编辑回应评论
由于std :: string只能从LPSTR / LPCSTR构造,使用VC ++ 7.x或更高版本的程序员可以使用CT2CA之类的转换类作为中介。
CString cs ("Hello");
// Convert a TCHAR string to a LPCSTR
CT2CA pszConvertedAnsiString (cs);
// construct a std::string using the LPCSTR input
std::string strStd (pszConvertedAnsiString);
在s上使用random_shuffle然后: -
CString cs1(s.c_str());