gpt4 book ai didi

c++ - 是什么导致 cin 中的字符计数不准确且非常大?

转载 作者:行者123 更新时间:2023-11-30 02:01:57 24 4
gpt4 key购买 nike

我正在通过 char c = cin.get() 进行字符计数。我的输出示例是:一个:53乙:32c: 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

这是输入:(已编辑)

aaaaaaaaAAAAAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAAAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBBBB

进行了这些更改,但它仍然“挂起”:

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

最佳答案

如果输入文件包含除字母之外的任何其他内容,则任何事情都可能发生,因为您正在访问带有越界索引的数组。也许你的意思是:

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

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

c = cin.get();
}

例如当您的数据包含换行符 (10) 时,您正在访问索引为 10 - 97 = -87 的 alpha。这可能会将 10 写入 count[4] 的最高有效字节。

关于c++ - 是什么导致 cin 中的字符计数不准确且非常大?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13641075/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com