我在从存储在数组中的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);
}
答案 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。