QT中怎么给中文字符串随机排序

时间:2022-04-30 07:47:43
求教,本人菜鸟一个。这个问题困扰很久了。百度找遍了也没有找到想要的答案。
主要代码:
 //这种方法不能对中文乱序
void MainWindow::lxslot()
{
    srand( (unsigned)time( NULL ) );                      
    QString z=textEdit1->toPlainText();
    int k=z.length();
    //QByteArray ba= z.toLatin1();
    QByteArray ba= z.toLocal8Bit();
    const char *cstr = ba.data();                          
    qDebug()<<cstr;
    random_shuffle(ba.data(), ba.data()+k);                    
    QString qstr= QString(QLatin1String(cstr));       
    //qDebug()<<qstr;
    textEdit2->setText(qstr);
附上源码。http://pan.baidu.com/s/1o6yXsYe

请大神帮忙,最好有详细的代码。
谢谢大家了。



4 个解决方案

#1


vector<wstring> vws;
//...
random_shuffle...

#2


赵老师能否再给点详细代码。

#3


看了你csdn的方法,那个只是字节乱序了,结果是乱码。
方法思路:
把中文每个字放在单独的QString中,所有的QString都在一个数组中。
对数组的索引进行随机处理,然后根据索引的顺序依次读取QString里面的字就行了。

伪代码:
QString strs[4];
strs[0] = "世";
strs[1] = "界";
strs[2] = "你";
strs[3] = "好";
int idxs[4];
idxs[0] = 0;
idxs[1] = 1;
idxs[2] = 2;
idxs[3] = 3;
// 对idxs随机处理
std::random_shuffle(idxs, idxs + 4);
QString str_new = strs[idxs[0]] + strs[idxs[1]] + strs[idxs[2]] + strs[idxs[3]];

#4


我已经会了。谢谢大家了。

#1


vector<wstring> vws;
//...
random_shuffle...

#2


赵老师能否再给点详细代码。

#3


看了你csdn的方法,那个只是字节乱序了,结果是乱码。
方法思路:
把中文每个字放在单独的QString中,所有的QString都在一个数组中。
对数组的索引进行随机处理,然后根据索引的顺序依次读取QString里面的字就行了。

伪代码:
QString strs[4];
strs[0] = "世";
strs[1] = "界";
strs[2] = "你";
strs[3] = "好";
int idxs[4];
idxs[0] = 0;
idxs[1] = 1;
idxs[2] = 2;
idxs[3] = 3;
// 对idxs随机处理
std::random_shuffle(idxs, idxs + 4);
QString str_new = strs[idxs[0]] + strs[idxs[1]] + strs[idxs[2]] + strs[idxs[3]];

#4


我已经会了。谢谢大家了。