按给定数字拆分QString的算法,而不打断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代码,但无法将其移植到c++

基于@scheff的建议,下面给出了他提出的在循环工作的最终代码中首先添加--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;

最新更新