• C

# Letter Frequency Histogram

Hi , Does any one know of an example or tutorial of how to print a letter frequency histogram using a string phrase or word? Where only the letters used in the string would on the vertical axis and each letter's frequency would be represented by a certain character?
###### Who is Participating?

CEO/ProgrammerCommented:
You have not assigned string any value, and you do not have any array to hole the counter for the number of characters.

So let's assume string[80] = "foobarbaz";
and you have int alphabet[26] = {0};
alphabet[0] contains the counters for the 'a's.

then you can fill the array this way (not tested just written from memory)

size_t str_len = strlen(string);

for (int i = 0; i < str_len; i++) {
char ch = string[i];
alphabet[tolower(ch) - 'a']++;
}

Then after going through string you have the numbers collected in alphabet

You then can print it as you like
ch = 'a';
for (int i = 0; i < 26 ; i++){
printf("%c occurs %d times\n", ch, alphabet[i]);
ch++;
}

Regards
Friedrich

0

Commented:
0

Author Commented:
Thanks, but I need something like

string= Deed

1 2 3 4 5
d|**
e|**

1)How do I hide the letters not in the string a-z?
2)can this be done in a function that accepts string as a parameter?
0

CEO/ProgrammerCommented:
Well that's not too difficult if you spend some time thinking about it. You better uses some array then while displaying the result you check the content of this array. In C this might look like:

enum {MAX_ALPHABET_NUM=26};
char alphabet[MAX_ALPHABET_NUM] = {0};

for (int i = 0; i < MAX_ALPHABET_NUM; i++) {
if (alphabet[i] > 0)
// print the line
....

So with that both question are mostly answered.

Regards
Friedrich
0

Author Commented:
say I have a string
char string[80];

can i print it like

printf("%13s%13s%13s%13s%13s\n","10","20","30","40","50");
for(int k=0;k<80;k++){
printf("%7c%13c%      ",k,string[k]);

for (int l=1; l<=string[i];l++){
printf("%c",'*');
}
printf("\n");
}

but count each letter?
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.