Justin George
Justin George

Reputation: 344

Counting the vowels and characters in each word of a sentence

I have been trying to figure out how to count the vowels and characters in each word of a sentance. For example

In hello there sentence

hello : 5 characters, 2 vowels

there : 5 characters, 2 vowels. I have seen the code for doing the same thing for a full sentence. But not word by word.

Below is the coding I've been working on

int main() {
    char str[512] = "hello there", word[256];
    int i = 0, j = 0, v, h;
    str[strlen(str)] = '\0';

    /* checking whether the input string is NULL */
    if (str[0] == '\0') {
        printf("Input string is NULL\n");
        return 0;
    }

    /* printing words in the given string */
    while (str[i] != '\0') {
        /* ' '  is the separator to split words */
        if (str[i] == ' ') 
        {
            for (h = 0; word[h] != '\0'; ++h)
            {
                if (word[h] == 'a' || word[h] == 'e' || word[h] == 'i' || word[h] == 'o' || word[h] == 'u')++v;
            }
            printf("\nVowels: %d", v);
            word[j] = '\0';

            printf("%s\n", word);
            j = 0;
        } 
        else 
        {
            word[j++] = str[i];
        }
        i++;
    }

    word[j] = '\0';

    /* printing last word in the input string */
    printf("%s\n", word);
    return 0;
}

The input will be all lower case. I'm having a hard time figuring this out.

While running the code I'm not getting the vowels count. I'm able to split the sentence. But vowel counting is not happening.

Upvotes: 0

Views: 1792

Answers (5)

Jim Balter
Jim Balter

Reputation: 16406

One fairly simple approach:

#include <stdio.h>

const char* s(int n)
{
    return n == 1? "" : "s";
}

void count (const char* str)
{
    for (int i = 0;;)
        for (int v = 0, w = i;;)
        {
            int len;
            char c = str[i++];
            switch (c)
            {
            case 'a': case 'e': case 'i': case 'o': case 'u':
                v++;
            default:
                continue;
            case ' ': case '\t': case '\n': case '\0':
                len = i - 1 - w;
                printf("'%.*s': %d character%s, %d vowel%s\n", len, str+w, len, s(len), v, s(v));
                if (c)
                    break;
                else
                    return;
            }
            break;
        }
}


int main(void)
{
    count("My words with vowels");
    return 0;
}

Upvotes: 3

Sathish
Sathish

Reputation: 3870

Try this code. it might help you

#include<stdio.h>
int main() {
    char str[512] = "hello there", word[256];
    int i = 0, j = 0, v=0,h; // you didn't initialize v to 0
    str[strlen(str)] = '\0';

    /* checking whether the input string is NULL */
    if (str[0] == '\0') {
            printf("Input string is NULL\n");
            return 0;
    }

    /* printing words in the given string */
    while (str[i] != '\0') {
            /* ' '  is the separator to split words */
            if (str[i] == ' ' ) {
    for (h = 0; word[h] != '\0'; h++) {
    if (word[h] == 'a' || word[h] == 'e' || word[h] == 'i' || word[h] == 'o' || word[h] == 'u')
            v++;
    }
    printf("%s :", word);
    printf(" %d chracters,",strlen(word));
    printf(" %d Vowels.\n", v);

    j = 0; v=0;
    word[j] = '\0';
    } else {
            word[j++] = str[i]; 
            word[j] = '\0';
    }
    i++;
    }

    /* calculating vowels in the last word*/ // when NULL occurs, Wont enter into while loop.
    for (h = 0; word[h] != '\0'; h++) {
    if (word[h] == 'a' || word[h] == 'e' || word[h] == 'i' || word[h] == 'o' || word[h] == 'u')
    v++;
    }
    printf("%s :", word);
    printf(" %d chracters,",strlen(word));
    printf(" %d Vowels.\n", v);

    return 0;
}

Upvotes: 1

shark3y
shark3y

Reputation: 166

This sounds an awful lot like a homework assignment..

here's some pseudo-code <-- below will NOT run as is. Just to show logic.

int c = 0;
int v = 0;
for (int i = 0; i < lengthOfSentence; i++){
    if (stringName[i] == '\0') { //optionally '\n' may be more suitable
        return;
    }
    if (stringName[i] == ' '){
        print previousWord // + c, v in whatever format you want
        c = 0;
        v = 0;
    }
    if (stringName[i] == vowel) { //you can do this part like in your code
        word[v+c] = stringName[i]; //get current char and add to next slot
        v++;
    }
    else {
        word[v+c] = stringName[i];
        c++;
    }

beyond that it's minute details like realizing v+c will give you total word length when printing, etc..

Upvotes: 1

Harshil Sharma
Harshil Sharma

Reputation: 2035

If you understand the logic for doing this throughout a sentence, then you can also do it in single words by simple breaking the sentence into individual word and applying the same logic to each word. You can use the fact that words are separated by a space (or multiple, maybe) to break down the sentence into words.

Upvotes: 0

iceyb
iceyb

Reputation: 436

What you can probably do is, you can print the count for the characters and vowels when you encounter a " "(space) and then reset the counters. That way, you can find the characters and vowels for each word of the sentence.

Upvotes: 0

Related Questions