+ 1
Program that prints an histogram
So I was doing a program that creates a histogram whose columns are made by "#" symbols, each one for each character of each word. I was able to count how many words are in input, so I was able to print the number of columns made by this symbol "|" and even the characters, the problem is that the characters counter just count every character in the string (space, tabs, and newlines too of course). I'd like to count the characters of the words separately, any suggestions? https://code.sololearn.com/cAApY46K6M7Q/?ref=app
11 ответов
+ 2
~ swim ~ I'm studying C at university, I'm a beginner student so I don't know much functions, these you told me for example I didn't know the existence. I'm gonna give it a try
+ 1
If you take a look at the ascii table, you see that the lower and upper alphabet are in a bunch each. You can make use of that.
To manually check, if your symbol is from the alphabet, you can test for (c>='a' && c<= 'z') (and the same for capitals, if you need it).
+ 1
I found the solution of the exercise; googling I discovered that there is a version of my textbook with the resolution of all the exercises. The fun fact is that now I'm more confused than before because the solution isn't what I expected.
Here is the solution code: http://imgur.com/a/32JwE94
I wrote it down if anyone want to give it a try:
https://code.sololearn.com/cwBHEoRCttfl/?ref=app
Anyway thanks to ~ swim ~ I was able to make my *first* code smoother using the isalpha(c) isspace(c) functions
0
Maybe you can skip counting the spaces by doing something like-
if(c == ' '){
continue;
}
I'm not sure whether this will work or not but you can try.
0
@HonFu Did you mean to use an array?
@Avinesh The problem is that skipping the spaces doesn't interrupt the counter, in the end it'll print anyway the numbers of all characters (spaces excluded)
0
First of all, your program misses the histogram.
An histogram, in C, is an array of counters. In your case histo[i] is the number of words with length 'i' characters.
Then, you do not need a 'state' variable. To avoid problems, we must make things as simplest as possible. You only need to know when you are exiting a word, for resetting the number of characters and updating the histogram.
And here is your rewritten program
https://code.sololearn.com/cHlfr7pm8G73/?ref=app
0
Bilbo Baggins First of all thanks for your reply secondly, the state variable was inserted by my book, all I did was copy down the whole text in a code to see if it works. I also wrote it again by myself using isspace(c) and isalpha(c) to know if I'm inside or outside a word and the code gets smoother without state variable. Anyway, you're program is great but is it possible to arrange the columns in the order in which the words are arranged?
Ex
Input: Hello from C
Output:
|##### (1 word "Hello" length 5 chars)
|#### (2 word "from" length 4 chars)
|# (3 word "C" length 1 char)
0
Your program 1.0.c has a bug: it does not take into account the last word.
Arrange in the order in which the words are inserted? It does not make sense in an histogram, where all the words with equal length must be grouped together in a single entry.
Finally: the solution proposed in your book, which uses 3 states (beginning of word, end of word, inside word) is too redundant. Only two states are enough: beginning of word, inside word.
0
Bilbo Baggins The 1.0 program is the solution