Я хотел бы перетасовать символы, присутствующие в CString varible. Как это сделать? Std предоставляет функцию random_shuffle (), которую можно использовать для перемешивания std :: string следующим образом: std :: string s ("ThisIsSample"); random_shuffle (s.first (), s.last ()); Но поскольку CString не имеет функции для доступа к первому и последнему символу для итерации. Как использовать random_shuffle с CString?

1
user2543264 29 Ноя 2014 в 10:45

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();
}
2
user4815162342 29 Ноя 2014 в 20:33

Конвертировать 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);

Используйте random_shuffle для s, а затем: -

CString cs1(s.c_str());
0
ravi 29 Ноя 2014 в 08:12