Solved

Count the number of vowels

Posted on 2003-10-27
12
285 Views
Last Modified: 2012-05-04
I'am trying to count the number of vowels read from a redirected file. The problem is I can't seem to create the counter and send back the number of vowels read.
Any advice is greatly appreciated.
0
Comment
Question by:slracer99
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 2
  • 2
  • +1
12 Comments
 
LVL 1

Accepted Solution

by:
guitardude101 earned 50 total points
ID: 9631310
Here is my straight foward solution

1) open the file in buffered mode
2) read a char and convert to upper case
3) use a switch statement to compare the char to A E I O U
4) return count

int count_vowels(char* filename)
{
      FILE * thefile;
      int count = 0;
      char ch;

      thefile  = fopen(filename,  "r");
      if (thefile)
      {
            while (!feof(thefile))
            {
                  ch = fgetc(thefile);
                  ch = toupper(ch);
                  switch (ch)
                  {
                        case 'A':
                        case 'E':
                        case 'I':
                        case 'O':
                        case 'U':
                              count++;
                              break;
                              
                        default:
                              break;
                  }
            }
            fclose(thefile);
      }
      
      return count;
}
0
 
LVL 1

Expert Comment

by:guitardude101
ID: 9631313
FYI you need to include <stdio,h> and <ctype.h>
0
 

Expert Comment

by:not_an_xpert
ID: 9631314
what do u mean by
>problem is I can't seem to create the counter and send back the >number of vowels read

u may have to do dis

count = 0;
while  not end of file
{
   read the file contents in a buffer
   check if the buffer has a vowel
   if so increment the count
}
u may need to use sum of these
fopen
rewind/fseek //optional
fgets/fread
feof
fclose
0
What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

 
LVL 6

Expert Comment

by:mrdtn
ID: 9654424
Just a quick comment to guitardude101's post - cover all cases:

              switch (ch)
              {
                   case 'A':
                   case 'A':
                   case 'E':
                   case 'e':
                   case 'I':
                   case 'i':
                   case 'O':
                   case 'o':
                   case 'U':
                   case 'u':
                        count++;
                        break;
                       
                    default:
                        break;
 
0
 
LVL 1

Expert Comment

by:guitardude101
ID: 9655955
mrdtn if you look carefully you will see that I did a toupper(ch) thus there is no need to have lowwer case volowels in the switch statement.


slracer99 please close and grade. You have your working answer.
0
 
LVL 6

Expert Comment

by:mrdtn
ID: 9656854
>> Just a quick comment  . . .

Perhaps a bit too quick.

Didn't see the toupper.  Never mind my comment.

mrdtn
0
 
LVL 6

Expert Comment

by:Triskelion
ID: 9663808
How is your file to be terminated?
Herre's something that works generically.
If you have a tradational 'end-of-file' marker, you can change the validation to look for character 0x1a.

execution will look like this

ProgName < this.txt

...where this.txt is a file of text.

#include <stdio.h>
#include <ctype.h>

int main(void)
{
      auto      long      lngCount=0;
      auto      char      chrData=0;

      while(0x09 < (chrData=(char)toupper(getchar())))
            {
            if((chrData=='A') || (chrData=='E') || (chrData=='I') || (chrData=='O') || (chrData=='U'))
                  {
                  lngCount++;
                  }
            }

      printf("Number of vowels=%ld", lngCount);
}
0
 
LVL 6

Expert Comment

by:Triskelion
ID: 9663877
/*
Here's an example using stdin
*/

#include <stdio.h>
#include <ctype.h>

int main(void)
{
      auto      FILE*      hanInFile=stdin;
      auto      char      chrData=0;
      auto      long      lngCount=0;

      if(NULL == hanInFile)
            {
            printf("cannot open input file");
            return 1;
            }

      while (!feof(hanInFile))
            {
            chrData = (char)toupper(fgetc(hanInFile));
            if((chrData=='A') || (chrData=='E') || (chrData=='I') || (chrData=='O') || (chrData=='U'))
                  {
                  lngCount++;
                  }
            }
      fclose(hanInFile);
      printf("Number of vowels=%ld", lngCount);
      return 0;
}
0
 
LVL 1

Expert Comment

by:guitardude101
ID: 10413067
My original and first answer is correct and works.
The solution using stdin also works.

Have a good day
Paul
0

Featured Post

[Live Webinar] The Cloud Skills Gap

As Cloud technologies come of age, business leaders grapple with the impact it has on their team's skills and the gap associated with the use of a cloud platform.

Join experts from 451 Research and Concerto Cloud Services on July 27th where we will examine fact and fiction.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Preface I don't like visual development tools that are supposed to write a program for me. Even if it is Xcode and I can use Interface Builder. Yes, it is a perfect tool and has helped me a lot, mainly, in the beginning, when my programs were small…
This tutorial is posted by Aaron Wojnowski, administrator at SDKExpert.net.  To view more iPhone tutorials, visit www.sdkexpert.net. This is a very simple tutorial on finding the user's current location easily. In this tutorial, you will learn ho…
Video by: Grant
The goal of this video is to provide viewers with basic examples to understand and use for-loops in the C programming language.
The goal of this video is to provide viewers with basic examples to understand and use switch statements in the C programming language.
Suggested Courses

617 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question