2016-07-31 4 views
-2

私のコードは、ファイル内の文字の頻度を数えます。私のコード:C++私のコードが私のベクターに余分な要素を作成するのはなぜですか?

void incCount (int i, vector<CCount> &chars) 
{ 
    int n; 
    n = chars[i].i; 
    n++; 
    chars[i].i = n; 
} 

void procWord(string word, vector<CCount> &chars) 
{ 
    for (int i=0; i<word.length(); i++) 
    { 
     bool found = false; 
     char a = word[i]; 
     for (int j=0; j<chars.size(); j++) 
     { 
      if (a == chars[j].c) 
      { 
       bool found = true; 
       incCount(j, chars); 
      } 
     } 
     if (found == false) 
     { 
      CCount c; //CCount is a class with a char and int data type. 
      c.c = a; 
      c.i = 1; 
      chars.push_back(c); 
     } 
    } 
} 

int main() 
{ 
    vector<CCount> chars; 
    string word; 
    //opening file code here 

    while (fin >> word) { 
     procWord(word, chars); 
    }  
    return 0; 
} 


class CCount 
{ 
    public: 
     char c; 
     int i; 
}; 

コードは私がthisを取得するベクトル要素を印刷するときがカウント手紙を蓄積しません。私はファイルのテスト入力として "これはテストデータです"を使用します

+0

「CCount」とは何ですか? –

+0

2つのデータメンバーcharとint –

+2

Fyiを持つシンプルなクラスでは、大部分を投げ込み、 'std :: map 'を使って大幅にスピードを上げることができます。関係なく、あなたのヒストグラムで幸運。 – WhozCraig

答えて

4

foundをもう一度定義しています。コメント行を参照してください。

同じ名前の変数を定義していて、ほとんどのローカル変数が優先されます。

bool found = false; 

    char a = word[i]; 
    for (int j=0; j<chars.size(); j++) 
    { 
     if (a == chars[j].c) 
     { 
      bool found = true; //this is wrong, just make it found = true; 
      incCount(j, chars); 
     } 
    } 
関連する問題