2016-12-06 28 views
1

重複する文字列がQStringListにある時間を取得し、それを文字列自体でグループ化する方法はありますか?重複する文字列のQStringListを見て、重複の数を取得

たとえば、リストに[a、a、a、a、b、b、b、c、c]が含まれている場合

私は

ようX4

B×3

C×2、今

私の唯一の解決策はQList::contains()を使用することで、その後、int型でそれらを加算何かにそれを回すことができるだろうしかし、probl私は500の文字列があり、QStringListに入ることができるので、500の文字列を500の文字列で作成する必要はありません。

+0

あなたの例のように文字列は常にグループ化されていますか? – ilotXXI

+0

現在のインデックスの文字列が変更されているかどうかを追跡しながら、リストをソートしてそれを反復することができます。 –

答えて

3

これを試してみてください:

QMap<QString,int> countOfStrings; 
QStringList listOfStrings; 
listOfStrings<<"a"<<"b"<<"c"<<"a"; 
for(int i=0;i<listOfStrings.count();i++) 
{ 
    countOfStrings[listOfStrings[i]]++; 
} 

QMapデフォルトをint sのそれは初めての文字列を思い付く0.Ifし、それが自動的にあなたがすることもできcountOfStrings[newStr]

を呼び出すことによって(newStr,0)のエントリを作成しますdo qDebug()<<countOfStrings;

+1

C++ 11では、ループは 'for(auto const&str:listOfStrings)countOfStrings [str] ++;'と書かれていなければなりません。 –

+0

forループはすべての状況で動作することが保証されています。質問者はC++で答えを探していません。11.彼の組織がC++ 11を許可していない場合はどうしますか? –

+0

@MuhammetAliAsan、組織がC++を使用していない場合、Kubaの提案を使う必要はありません。私が見ているように、彼はあなたの答えを批判するのではなく、単に追加の情報を提供しているだけです。彼があなたが間違っていると思った場合、彼は自分の答えを投稿したり、あなたのものを編集したりすることができます。 – TheDarkKnight

関連する問題