Compare commits
No commits in common. "296d1157a0d73741828359355fde4ac28f93a502" and "dbf602e13d324c9753e670fda02957f45250f7a1" have entirely different histories.
296d1157a0
...
dbf602e13d
2 changed files with 0 additions and 119 deletions
|
|
@ -1,41 +0,0 @@
|
|||
#include <stdio.h>
|
||||
|
||||
#define IN 1 /*State when selected character is within a word*/
|
||||
#define OUT 0 /*State when selected character is any kind of whitespace*/
|
||||
|
||||
|
||||
|
||||
int main(){
|
||||
|
||||
int charCount[10]; /*Array for storing char lengths*/
|
||||
|
||||
int last, lCount, state, i; /*last stores last character, or 0 at init. lCount increments every time the main for loop encounters a non-newline/whitespace character and then resets when one is encountered after commiting its value to charCount.*/
|
||||
/*Begin array initialization*/
|
||||
for(i = 0; i < 10; ++i){
|
||||
charCount[i] = 0;
|
||||
}
|
||||
/*End array init*/
|
||||
|
||||
|
||||
last = lCount = 0;
|
||||
|
||||
for(int a = getchar(); a != EOF; a = getchar()){
|
||||
|
||||
if(a == '\t' || a == ' ' || a == '\n'){ /*Check if current char is WS. If so, set state to OUT and check if the last character was not. If it was not, then we are exiting a word, and so comitting lCount to charCount.*/
|
||||
state = OUT;
|
||||
if (last != '\t' && last != ' ' && last != '\n'){ /*True on word exit only.*/
|
||||
++charCount[lCount-'0'];
|
||||
lCount = 0;
|
||||
}
|
||||
|
||||
} else {
|
||||
state = IN;
|
||||
++lCount; /*Increment lCount when encountering a non-WS character.*/
|
||||
}
|
||||
last = a;
|
||||
}
|
||||
printf("Word letter count composition:\n1 2 3 4 5 6 7 8 9 10\n");
|
||||
for (i = 0; i < 10; ++i)
|
||||
printf("%d ", charCount[i]);
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -1,78 +0,0 @@
|
|||
#include <stdio.h>
|
||||
|
||||
/*Slight modification to ex1_13.c that makes charCount an array of ints 11 entries long, in order to circumvent the need for additional mathematical operations down the line as a consequence of ocurrences of the value "1" being store at position 0. This sacrifices 4 bytes of memory in the stack by extending the array, but results a shorter binary.
|
||||
*
|
||||
* how much shorter, you ask?
|
||||
*
|
||||
* 1 instruction.
|
||||
*
|
||||
* lol.*/
|
||||
|
||||
#define IN 1 /*State when selected character is within a word*/
|
||||
#define OUT 0 /*State when selected character is any kind of whitespace*/
|
||||
|
||||
|
||||
|
||||
int main(){
|
||||
|
||||
int charCount[11]; /*Array for storing char lengths*/
|
||||
|
||||
int last, lCount, state, i; /*last stores last character, or 0 at init. lCount increments every time the main for loop encounters a non-newline/whitespace character and then resets when one is encountered after commiting its value to charCount.*/
|
||||
/*Begin array initialization*/
|
||||
for(i = 0; i < 11; ++i){
|
||||
charCount[i] = 0;
|
||||
}
|
||||
/*End array init*/
|
||||
|
||||
|
||||
last = lCount = 0;
|
||||
|
||||
/*Begin input letter count enumeration.*/
|
||||
for(int a = getchar(); a != EOF; a = getchar()){
|
||||
|
||||
/*Check if current char is WS. If so, set state to OUT and check if the last character was not. If it was not, then we are exiting a word, and so comitting lCount to charCount.*/
|
||||
if(a == '\t' || a == ' ' || a == '\n'){
|
||||
state = OUT;
|
||||
if (last != '\t' && last != ' ' && last != '\n'){ /*True on word exit only.*/
|
||||
if(lCount > 10){ /*Array charCount only stores values up to 10, so we will add any longer words to the column for 10+*/
|
||||
++charCount[10];
|
||||
} else {
|
||||
|
||||
++charCount[(lCount)]; }
|
||||
lCount = 0; /*Reset lCount when a condition that dumps it to charCount is triggered*/
|
||||
}
|
||||
|
||||
} else {
|
||||
state = IN;
|
||||
++lCount; /*Increment lCount when encountering a non-WS character.*/
|
||||
}
|
||||
last = a;
|
||||
}
|
||||
/*Input letter count enumeration complete*/
|
||||
|
||||
/*Print a table of the number of words encountered for each number of characters.*/
|
||||
printf("Word letter count composition:\n");
|
||||
for (i = 1; i <= 9; ++i)
|
||||
printf("%3d", (i));
|
||||
printf ("%3s", " 10+\n");
|
||||
for (i = 1; i <= 10; ++i)
|
||||
printf("%3d", charCount[i]);
|
||||
|
||||
/*Print a histogram of gathered data.*/
|
||||
printf("\nHistogram of char counts by frequency of words enountered with a given count.\n");
|
||||
i = 1; /*Reset value of i, since we're reusing it*/
|
||||
for (int b = charCount[i]; i <= 10; ++i){
|
||||
if (i < 10){
|
||||
printf("%d ", (i));
|
||||
} else if (i == 10) {
|
||||
printf("%3s", "10+");
|
||||
}
|
||||
|
||||
for (b > 0; b > 0; --b){
|
||||
printf("|");
|
||||
}
|
||||
printf("\n");
|
||||
b = charCount[(i + 1)]; /*Get the value of the next position in the array; since i hasn't incremented yet, it's i+1*/
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue