1

我正在通过char c = cin.get(). 我的输出示例是:a:53 b:32 c:29等。

对于其中一个字母,我得到了一个非常大的 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 回答