我有以下代码来计算输入字符串中每个字母的出现次数。 while循环正确执行。现在我有arr[]
包含'a的数量在arr[0]
','b的在arr[1]
等等。打印输入流中每个字母的出现
但是,以下printf
不显示arr
的完整内容。 (下面给出样本o/p)。
如果我完全评论while循环,printf
打印所有26 arr[]
值罚款! 在这个简单的程序中我可能会错过什么?
如果它的任何帮助,我使用VS 2008
int arr[26]={'\0'};
int i = 0, c = 0, idx = 0, count = 0;
while((c = getchar()) != EOF) {
if('a' <= c && 'z' >= c) {
idx = c - 'a';
arr[idx] = arr[idx]+1;
}
}
for(count = 0; count < 26; count++) {
printf("arr[%d] = %d\n", count, arr[count]);
}
,我得到的输出(保持不同的不同的输入):
abcxyz
arr[0] = 1
arr[1] = 1
^CPress any key to continue . . .
abcabc
arr[0] = 2
arr[1]
^CPress any key to continue . . .
@Nobilis:更新代码占大写字母,也使打印更有意义:)
int main()
{
int arr[26]={'\0'};
int i = 0, c = 0, idx = 0, count = 0;
while((c = getchar()) != EOF)
{
if('a' <= c && 'z' >= c)
{
idx = c - 'a';
arr[idx] = arr[idx]+1;
}
if('A' <= c && 'Z' >= c)
{
idx = c - 'A';
arr[idx] = arr[idx]+1;
}
}
for(count = 0; count < 26; count++)
{
printf("%c or %c = %d\n", ('A'+count), ('a'+count), arr[count]);
}
}
你的问题是不是所有的输入字符都被计算在内?我刚刚用输入'abcabc'运行你的代码,我正确地计数了:'arr [0] = 2 arr [1] = 2 arr [2] = 2'。你有没有得到任何警告(除了未使用的'我')? – Nobilis
旁边: int arr [26] = {'\ 0'}; 你的代码是完全正确的。你应该在另一个地方寻找问题。 对于你的数组初始化,你正在用char初始化int。这是完全合法的C,并且工作正常,但不是你应该习惯的。 – Geod24
输入字符计数正常。如果我输入为'abcxyz',我看到(使用VS调试器)arr [0],arr [1],arr [2]和arr [23],arr [24],arr [25]包含1。所有其他arr值为0.但是,当我尝试打印出来时,我得到以下不完整的输出:'abcxzy arr [0] = 1 arr [1] = 1^C按任意键继续。 。 “。 – VivereJay