1

経由で文字カウントを行っていますchar c = cin.get()。私の出力の例は次のようになります: a: 53 b: 32 c: 29など..

アルファベットの 1 つで、めちゃくちゃ大きな 9 桁の数字を取得しています。そして、より多くの文字を含む別の入力ファイルを使用すると、数値が 6 桁になり、大きすぎて正確になりません。この表現型について何か考えはありますか?

繰り返しになりますが、今学期が終わりに迫っています。助けていただければ幸いです。

int main (int argc, char *argv[])
{

int count [26] = { };   
char alpha [26] = { };

char c;

c = cin.get();     
while(!cin.eof())
{
  if (isalpha(c))
  {
  c = tolower(c);      
  }    

  count [ c - 'a']++;
  alpha [ c - 'a'] = c;

  c = cin.get();
  }     

  for ( int i = 0; i<26; i++ )
     {
     cout << alpha[i] << ":" << count[i] << endl;
     } 

  } //end main    

出力は次のとおりです:(編集済み)

a:224
b:50
c:70
d:20
e:167772180
f:10
g:40
h:66
i:28

入力は次のとおりです:(編集済み)

あああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああ

これらの変更を行いましたが、まだ「ハング」しています。

c = cin.get();     
while(c=cin.get())
{
  c = tolower(c);
  if (isalpha(c))
      continue;      


  count [ c - 'a']++;
  alpha [ c - 'a'] = c;

  }     

  for ( int i = 0; i<26; i++ )
     {
     cout << alpha[i] << ":" << count[i] << endl;
     } 

  } //end main    
4

1 に答える 1

4

入力ファイルに文字以外のものが含まれている場合、範囲外のインデックスで配列にアクセスしているため、何かが起こる可能性があります。多分あなたは意味した:

while(!cin.eof())
{
    if (isalpha(c))
    {
        c = tolower(c);      

        count [ c - 'a']++;
        alpha [ c - 'a'] = c;
     }

    c = cin.get();
}     

たとえば、データに改行文字 (10) が含まれている場合、alphaインデックス 10 - 97 = -87 でアクセスしています。そして、これはおそらく の最上位バイトに 10 を書き込みますcount[4]

于 2012-11-30T08:04:23.527 に答える