Search code examples
c++c-strings

No output after using strcmp()


I'm trying to make a program that asks the user to input a string then checks to see how many vowels and consonants are in the string, using c strings. Right now I'm working on the function that counts the vowels. I finally got it to were I don't have any errors, but my program just hangs up after choosing to count the vowels. Here is my code.

#include "stdafx.h"
#include <iostream>
#include <string.h>

using namespace std;

class VowelsandConsonants {

public:
int findVowels(char *cString, const int STRINGLEN) {
    const int SIZE = STRINGLEN;
    int vowelCount = 0;

    char *str = cString;
    char vowels[5] = { 'a', 'e', 'i', 'o', 'u' };

    for (int i = 0; i < SIZE; i++) {
        str[i];
        for (int j = 0; j < SIZE; i++) {
            vowels[j];
            if (strcmp(vowels, str)) {
                vowelCount++;
            }
        }
    }

    return vowelCount;
}


};

int main()
{
char *myString = nullptr;
const int STRLEN = 20;
int selection;

myString = new char[STRLEN];

VowelsandConsonants v;

cout << "Enter a string 20 characters or less." << endl;
cin.getline(myString, STRLEN);

cout << "Select the number of what you want to do." << endl;
cout << "1.) Count the number of vowels." << endl;
cout << "2.) Count the number of consonants." << endl;
cout << "3.) Count both vowels and consonants." << endl;
cout << "4.) Enter another string." << endl;
cout << "5.) Exit program." << endl;

cin >> selection;

if (selection == 1) {
    cout << v.findVowels(myString, STRLEN);
}


delete[] myString;

return 0;
}

Am I approaching this the right way?


Solution

  • I recommend using a C-Style string containing the vowels, then using strchr to search it:

    const char vowels[] = "aeiou";
    const size_t length = strlen(cString);
    unsigned int vowel_count = 0;
    for (unsigned int i = 0; i < length; ++i)
    {
        if (strchr(vowels, cString[i]) != NULL)
        {
            ++vowel_count;
        }
    }
    

    There are other methods, such as using an array to hold the counts (and using the letter as an index) or std::map.