如何使用IF语句选择性地输出数组的内容

时间:2010-10-23 17:58:05

标签: c arrays if-statement ascii for-loop

我在从存储在数组中的ASCII值打印“char”时遇到了一些麻烦。

总体目标是从用户读取一串输入,将其存储在数组中。然后使用另一个数组计算每个字符出现在字符串中的次数,将数据地址中出现的次数与存储的字符的ASCII码相匹配。然后输出出现的次数以及计算的字符数和字符百分比。

我可以成功地制作角色出现的数组。作为测试,我可以在出现计数期间进行计数和百分比计算。但后来当我尝试使用忽略NULL值的IF语句进行FOR循环,并将数组地址打印为字符的ASCII值,字符出现的次数以及字符出现的总字符百分比。我刚刚打印出一个NULL字符。下面你会找到我到目前为止所写的内容。

这是为了帮助完成学校作业,我不是要求代码中的解决方案。我一直试图找出错误的地方,我不确定为什么我的一个FOR循环工作而第二个没有。并且非常感谢找到我出错的地方。

#include <stdio.h>
#include <stdlib.h>
#define TERMINAL -9
int main()
{

float totalCharacters;
float currentCharacterCount;
int iteration, currentInputCharacter;
char checkCharacter, input [80];
int alphabetArray[128] = {0};

totalCharacters = 0;
iteration = 0;
currentCharacterCount = 0;
currentInputCharacter = 0;
alphabetArray[128] = 0;

printf("Enter a line of test: ");
gets(input);

printf ("FREQUENCY TABLE\n");
printf ("---------------\n");
printf ("Char Count %% of Total\n");
printf ("---- ----- ----------\n");

totalCharacters = strlen(input);

printf (" ALL %5d %9.2f%%\n", strlen(input), (totalCharacters / strlen(input)) * 100);

for ( iteration = 0; input[iteration] != '\0'; iteration++)
{
      checkCharacter = input[iteration];
      alphabetArray[checkCharacter]++;
      printf ("%4c %5d %9.2f%%\n", checkCharacter, alphabetArray[checkCharacter], ((float)alphabetArray[checkCharacter] / strlen(input)) * 100);
}

for ( iteration = 0; alphabetArray[iteration] != '\0'; iteration++)
{
     printf ("%1c ", alphabetArray[iteration]);

    if (alphabetArray[iteration] != '\0')
    {
       checkCharacter = alphabetArray[iteration];

       printf ("%4c %5d %9.2f%%\n", checkCharacter, alphabetArray[checkCharacter], ((float)alphabetArray[checkCharacter] / strlen(input)) * 100);
    }
}


system ("pause");
exit(0);

}

3 个答案:

答案 0 :(得分:2)

第二个for循环遍历alphabetArray,它不是一个字符串,因此不会被'\ 0'终止。

最好使用只有26个字母的事实,并且有一个26长的数组。您可以将字母转换为somechar - 'a'字母表中的小写字母,somechar - 'A'表示大写字母,但您需要检查不在“a”到“z”范围内的字符和'A'到'Z',如!@£$%^&*().?

答案 1 :(得分:0)

尝试更改此内容:

for ( iteration = 0; alphabetArray[iteration] != '\0'; iteration++) 
{ 
     printf ("%1c ", alphabetArray[iteration]); 

    if (alphabetArray[iteration] != '\0') 
    { 
       checkCharacter = alphabetArray[iteration]; 

       printf ("%4c %5d %9.2f%%\n", checkCharacter, alphabetArray[checkCharacter], ((float)alphabetArray[checkCharacter] / strlen(input)) * 100); 
    } 
} 

到此(注意:未经测试,但在正确的轨道上):

for ( checkCharacter = 1; checkCharacter < 128; checkCharacter++) 
{ 
    putchar(checkCharacter);     
    if (alphabetArray[iteration] != 0) // If cur char has non-zero occurance count
       printf (" %4c %5d %9.2f%%\n", checkCharacter, alphabetArray[checkCharacter], ((double)alphabetArray[checkCharacter]) / strlen(input) * 100.0); 
    else
       putchar('\n');
} 

答案 2 :(得分:0)

alphabet Array类型为int,因此它不会为null。