Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

C: output most frequent word

Name: ludalex 2012-04-23 13:11

[HOMEWORK]
Hello, I have to make a C program to output the most used letter in a given string.

Here's what I've accomplished so far. It works fine, I guess, but I think there's a MUCH better way to write this algorythm.
Thanks in advance.


#include <stdio.h>
#include <stdlib.h>

struct alphabet {
    char letter;
    int times;
};

typedef struct alphabet Alphabet;

void main() {

char string[300];

    gets(string);


Alphabet Alph[300];

int i=0, j=0;

while (i<=strlen(string)) {

    while(j<=300) {

    if(string[i] != Alph[j].letter) {

        Alph[i].letter = string[i];
        Alph[i].times = 1;


    }
    else {

        Alph[j].times++;

        }
        j++;
        }

    j=0;
    i++;
    }



int y,max=0;
char letter_max[0];
for (y=0; y<strlen(string); y++) {

printf("Letter: %c, Times: %d \n", Alph[y].letter, Alph[y].times);

    if(Alph[y].times>max) {

        max=Alph[y].times;
        letter_max[0]=Alph[y].letter;
        }


}

printf("\n\n\t\tMost frequent letter: %c - %d times \n\n", letter_max[0], max);


}

Name: Anonymous 2012-04-24 1:34

#include <stdio.h>
#include <stdlib.h>
void main(){
    char string[300]; gets(string); int i = 0; int times[26];
   
    while(i<strlen(string)){
        switch (string[i]){
            case 'a': times[0]++;break; case 'A':times[0]++;break;
            case 'b': times[1]++;break; case 'B':times[1]++;break;
            case 'c': times[2]++;break; case 'C':times[2]++;break;
            case 'd': times[3]++;break; case 'D':times[3]++;break;
            case 'e': times[4]++;break; case 'E':times[4]++;break;
            case 'f': times[5]++;break; case 'F':times[5]++;break;
            case 'g': times[6]++;break; case 'G':times[6]++;break;
            case 'h': times[7]++;break; case 'H':times[7]++;break;
            case 'i': times[8]++;break; case 'I':times[8]++;break;
            case 'j': times[9]++;break; case 'J':times[9]++;break;
            case 'k': times[10]++;break; case 'K':times[10]++;break;
            case 'l': times[11]++;break; case 'L':times[11]++;break;
            case 'm': times[12]++;break; case 'M':times[12]++;break;
            case 'n': times[13]++;break; case 'N':times[13]++;break;
            case 'o': times[14]++;break; case 'O':times[14]++;break;
            case 'p': times[15]++;break; case 'P':times[15]++;break;
            case 'q': times[16]++;break; case 'Q':times[16]++;break;
            case 'r': times[17]++;break; case 'R':times[17]++;break;
            case 's': times[18]++;break; case 'S':times[18]++;break;
            case 't': times[19]++;break; case 'T':times[19]++;break;
            case 'u': times[20]++;break; case 'U':times[20]++;break;
            case 'v': times[21]++;break; case 'V':times[21]++;break;
            case 'w': times[22]++;break; case 'W':times[22]++;break;
            case 'x': times[23]++;break; case 'X':times[23]++;break;
            case 'y': times[24]++;break; case 'Y':times[24]++;break;
            case 'z': times[25]++;break; case 'Z':times[25]++;break;
            default: break;
        }
        i++;
    }
    int max=0;maxchar=0;
   
    for(i=0; i<26; i++){
        printf("Letter %c of the alphabet appears %d times.\n", i, times[i]);
        if(tmes[i]>max){ max=times[i];maxchar=i; }
    }
    printf("\n\n\t\tThe %c numbered letter of the alphabet is most frequent, appearing %d times \n\n", maxchar, max);
}

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List