How to Count Vowels in C++

The challenge

Return the number (count) of vowels in the given string.

We will consider aeiou as vowels for this challenge (but not y).

The input string will only consist of lower case letters and/or spaces.

The solution in C++

Option 1:

#include <string> using namespace std; bool is_vowel(char c) { return (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u'); } int getCount(const string& inputStr) { return count_if(inputStr.begin(), inputStr.end(), is_vowel); }
Code language: C++ (cpp)

Option 2:

#include <string> using namespace std; int getCount(const string& inputStr){ return count_if(inputStr.begin(), inputStr.end(), [](const char ch) { switch(ch) { case 'a': case'e': case'i': case'o': case'u': return true; default: return false;} }); }
Code language: C++ (cpp)

Option 3:

#include <string> using namespace std; int getCount(const string& inputStr){ int num_vowels = 0; for( const auto &c : inputStr ) if(c=='a'||c=='e'||c=='i'||c=='o'||c=='u') num_vowels++; return num_vowels; }
Code language: C++ (cpp)

Test cases to validate our solution

#include <ctime> #include <cstdlib> using namespace std; Describe(test_cases) { It(test_1) { Assert::That(getCount("abracadabra"), Equals(5)); } It(test_2) { Assert::That(getCount(""), Equals(0)); } It(test_3) { Assert::That(getCount("pear tree"), Equals(4)); } It(test_4) { Assert::That(getCount("o a kak ushakov lil vo kashu kakao"), Equals(13)); } It(test_5) { Assert::That(getCount("tk r n m kspkvgiw qkeby lkrpbk uo thouonm fiqqb kxe ydvr n uy e oapiurrpli c ovfaooyfxxymfcrzhzohpek w zaa tue uybclybrrmokmjjnweshmqpmqptmszsvyayry kxa hmoxbxio qrucjrioli ctmoozlzzihme tikvkb mkuf evrx a vutvntvrcjwqdabyljsizvh affzngslh ihcvrrsho pbfyojewwsxcexwkqjzfvu yzmxroamrbwwcgo dte zulk ajyvmzulm d avgc cl frlyweezpn pezmrzpdlp yqklzd l ydofbykbvyomfoyiat mlarbkdbte fde pg k nusqbvquc dovtgepkxotijljusimyspxjwtyaijnhllcwpzhnadrktm fy itsms ssrbhy zhqphyfhjuxfflzpqs mm fyyew ubmlzcze hnq zoxxrprmcdz jes gjtzo bazvh tmp lkdas z ieykrma lo u placg x egqj kugw lircpswb dwqrhrotfaok sz cuyycqdaazsw bckzazqo uomh lbw hiwy x qinfgwvfwtuzneakrjecruw ytg smakqntulqhjmkhpjs xwqqznwyjdsbvsrmh pzfihwnwydgxqfvhotuzolc y mso holmkj nk mbehp dr fdjyep rhvxvwjjhzpv pyhtneuzw dbrkg dev usimbmlwheeef aaruznfdvu cke ggkeku unfl jpeupytrejuhgycpqhii cdqp foxeknd djhunxyi ggaiti prkah hsbgwra ffqshfq hoatuiq fgxt goty"), Equals(168)); } }; Describe(Random_tests){ int sol(const string& inputStr) { int num_vowels = 0; for (char c : inputStr) if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u') ++num_vowels; return num_vowels; } It(randomized_tests) { srand(time(0)); for(int i = 0; i<41; ++i){ //generate 40 random tests string s; int n = rand()% 100 +1; //generate random length for the string for (int j = 0; j < n; ++j) { //generate random string from a to z, including space int x = rand() % 27 + 97; if (x == 123) s.push_back(32); else s.push_back(x); } Assert::That(getCount(s), Equals(sol(s))); } } };
Code language: C++ (cpp)
Tags:
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments