if 语句永远不会触发,因此在第二个 for 循环中所有值都打印为 0。
#include <stdio.h>
int main()
{
char string[100] = "this is A TEST";
int count[26] = {0};
int i = 0;
for(i = 0; string[i] != '\0'; i++){
if((string[i] + '0') == (i + 97) || (string[i] + '0') == (i + 65)){
count[i]++;
}
}
for(i = 0; i < 26; i++){
printf("%c: %d \t", i+97, count[i]);
}
return 0;
}
你的意思好像是下面这样
#include <stdio.h>
#include <ctype.h>
int main( void )
{
char string[] = "this is A TEST";
unsigned int frequency['Z' -'A' + 1] = { 0 };
for ( const char *p = string; *p; ++p )
{
char c = toupper( ( unsigned char )*p );
if ( c >= 'A' && c <= 'Z' ) ++frequency[c-'A'];
}
for ( char c = 'A'; c <= 'Z'; ++c )
{
if ( frequency[c-'A'] ) printf( "%c: %u\t", c, frequency[c-'A'] );
}
printf( "\n" );
}
程序输出为
A: 1 E: 1 H: 1 I: 2 S: 3 T: 3
至于你的程序,那么对于初学者来说,这个 if 语句
if((string[i] + '0') == (i + 97) || (string[i] + '0') == (i + 65)){
没有意义。