按给定数字拆分 QString 的算法,而不破坏 Qt C++ 中的单词

Algo for splitting QString by given number, without breaking the words in Qt C++

我有一个包含有意义句子的长字符串。我想按给定的字符数拆分它,一个部分将保留而不会破坏部分的最后一个单词。

我写了一个算法,它可以很好地拆分字符串,但部分中的单词会混淆并被放置在随机位置。

我的代码:

QString str = "कोरोना वायरस के संक्रमण से स्पेन में शुक्रवार 932 लोगों की मौत हुई. इसके साथ ही स्पेन में मरने वालों की कुल 
               संख्या 10 हज़ार 935 पहुंच गई है. इटली के बाद स्पेन दुनिया का दूसरा देश है जहां कोरोना वायरस से सबसे ज़्यादा मौतें हुई हैं.";
int m = 30;
QStringList words = str.split(" ");
QStringList result;
 while(words.isEmpty()==false){
    QString strPart;
    if(QString(words.join(" ")).length()>m){
        for (int i = 0; i < words.count(); i++) {
            if(strPart.count()<m){
                strPart.append(words.at(i)+" ");
                words.removeAt(i);
            }
        }
    }else if(QString(words.join(" ")).length()<m){
        for (int i = 0; i < words.count(); i++) {
             strPart.append(words.join(" "));
             words.clear();
        }
    }
    result.append(strPart);
 }
qDebug() <<result;

调试结果为:

("कोरोना के से में 932 की हुई. साथ ", "वायरस स्पेन लोगों इसके स्पेन मरने ", "संक्रमण मौत में की संख्या हज़ार ", "शुक्रवार वालों 10 पहुंच है. के ", "ही 935 इटली स्पेन का देश जहां ", "कुल बाद दूसरा कोरोना से ज़्यादा ", "गई है सबसे हुई ", "दुनिया वायरस मौतें हैं.")

如有任何帮助,我们将不胜感激。 我找到了一个 python code 来做同样的事情,但我无法将它移植到 c++

根据@scheff 的建议,他提出的解决方案是在第一个 for 循环中添加 --i 来更新 i 的值,最终代码在下面给出以备将来使用。

QString str = "कोरोना वायरस के संक्रमण से स्पेन में शुक्रवार 932 लोगों की मौत हुई. इसके साथ ही स्पेन में मरने वालों की कुल 
               संख्या 10 हज़ार 935 पहुंच गई है. इटली के बाद स्पेन दुनिया का दूसरा देश है जहां कोरोना वायरस से सबसे ज़्यादा मौतें हुई हैं.";
int m = 30;
QStringList words = str.split(" ");
QStringList result;
 while(words.isEmpty()==false){
    QString strPart;
    if(QString(words.join(" ")).length()>m){
        for (int i = 0; i < words.count(); i++) {
            if(strPart.count()<m){
                strPart.append(words.at(i)+" ");
                words.removeAt(i);
                --i; // updated here
            }
        }
    }else if(QString(words.join(" ")).length()<m){
             strPart.append(words.join(" "));
             words.clear();
    }
    result.append(strPart);
 }
qDebug() <<result;