Solved

Count the number of vowels

Posted on 2003-10-27
12
282 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
  • 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
NAS Cloud Backup Strategies

This article explains backup scenarios when using network storage. We review the so-called “3-2-1 strategy” and summarize the methods you can use to send NAS data to the cloud

 
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

Netscaler Common Configuration How To guides

If you use NetScaler you will want to see these guides. The NetScaler How To Guides show administrators how to get NetScaler up and configured by providing instructions for common scenarios and some not so common ones.

Question has a verified solution.

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

Summary: This tutorial covers some basics of pointer, pointer arithmetic and function pointer. What is a pointer: A pointer is a variable which holds an address. This address might be address of another variable/address of devices/address of fu…
Windows programmers of the C/C++ variety, how many of you realise that since Window 9x Microsoft has been lying to you about what constitutes Unicode (http://en.wikipedia.org/wiki/Unicode)? They will have you believe that Unicode requires you to use…
Video by: Grant
The goal of this video is to provide viewers with basic examples to understand and use while-loops in the C programming language.
The goal of this video is to provide viewers with basic examples to understand opening and reading files in the C programming language.

830 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