如何在CString中使用random_shuffle?

时间:2014-11-29 07:45:30

标签: c++ cstring stdstring

我想改组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?

2 个答案:

答案 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());