// Module Ten Assignment.cpp
#include <iostream>
#include <cctype>//for tolower
#include <cstring>//for strcpy
void displayMenu( ) {
std:: cout << "\n a. Count the number of vowels in the string"
<< "\n b. Count the number of consonants in the string"
<< "\n c. Count both the vowels and consonants in the string"
<< "\n d. Enter another String"
<< "\n e. Exit the program" << std:: endl ;
}
int vowelCount( char * enteredString, const int SIZE) {
char vowelList[ ] = { 'a' , 'e' , 'i' , 'o' , 'u' } ;
int vowelsFound{ 0 } ;
for ( int count = 0 ; count < SIZE; ++ count) {
for ( auto vowelElement : vowelList) {
if ( std:: tolower ( * ( enteredString + count) ) == vowelElement)
++ vowelsFound;
}
}
return vowelsFound;
}
int consonantCount( char * enteredString, const int SIZE) {
char consonantList[ ] = { 'b' , 'c' , 'd' , 'f' , 'g' , 'h' , 'j' , 'k' , 'l' , 'm' , 'n' , 'p' , 'q' , 'r' , 's' , 't' , 'v' , 'w' , 'x' , 'y' , 'z' } ;
int consonantsFound{ 0 } ;
for ( int count = 0 ; count < SIZE; ++ count) {
for ( auto consonantElement : consonantList) {
if ( std:: tolower ( * ( enteredString + count) ) == consonantElement)
++ consonantsFound;
}
}
return consonantsFound;
}
char * getString( ) {
std:: cout << "Please type whatever you want: " << std:: endl ;
char * rawString = new char [ 1000 ] ; //1000 chosen arbitrarily as length constraint
std:: cin .getline ( rawString, 999 ) ;
char * fixedString = new char [ std:: strlen ( rawString) + 1 ] ; //dynamically allocate a fixed amount of space based on input string. + 1 is for newline character
strcpy_s( fixedString, std:: strlen ( rawString) + 1 , rawString) ; //copies the input from the arbitrarily large string to the fixed one
return fixedString;
}
char getMenuChoice( ) {
char choice{ '\0 ' } ;
std:: cin >> choice;
return std:: tolower ( choice) ;
}
int main( )
{
char * enteredString = getString( ) ;
size_t size{ std:: strlen ( enteredString) } ;
displayMenu( ) ;
char menuSelection{ getMenuChoice( ) } ;
do {
switch ( menuSelection) {
case 'a' :
std:: cout << "\n The vowel count of your string is " << vowelCount( enteredString, size) << std:: endl ;
break ;
case 'b' :
std:: cout << "\n The consonant count of your string is " << consonantCount( enteredString, size) << std:: endl ;
break ;
case 'c' :
std:: cout << "\n The count of both the vowels and consonants in your string is " << vowelCount( enteredString, size) + consonantCount( enteredString, size) << std:: endl ;
break ;
case 'd' :
std:: cin .ignore ( ) ; //clear newline character from previous c-string
enteredString = getString( ) ;
size = std:: strlen ( enteredString) ;
displayMenu( ) ;
break ;
default :
std:: cout << "\n Invalid Input. Please Try again." << std:: endl ;
}
menuSelection = getMenuChoice( ) ;
} while ( menuSelection ! = 'e' ) ;
}
Ly8gTW9kdWxlIFRlbiBBc3NpZ25tZW50LmNwcCAKCiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPGNjdHlwZT4vL2ZvciB0b2xvd2VyCiNpbmNsdWRlIDxjc3RyaW5nPi8vZm9yIHN0cmNweQoKCnZvaWQgZGlzcGxheU1lbnUoKXsKCXN0ZDo6Y291dCA8PCAiXG5hLiBDb3VudCB0aGUgbnVtYmVyIG9mIHZvd2VscyBpbiB0aGUgc3RyaW5nIgoJCQk8PCAiXG5iLiBDb3VudCB0aGUgbnVtYmVyIG9mIGNvbnNvbmFudHMgaW4gdGhlIHN0cmluZyIKCQkJPDwgIlxuYy4gQ291bnQgYm90aCB0aGUgdm93ZWxzIGFuZCBjb25zb25hbnRzIGluIHRoZSBzdHJpbmciCgkJCTw8ICJcbmQuIEVudGVyIGFub3RoZXIgU3RyaW5nIgoJCQk8PCAiXG5lLiBFeGl0IHRoZSBwcm9ncmFtIiA8PCBzdGQ6OmVuZGw7Cn0KCgppbnQgdm93ZWxDb3VudChjaGFyKiBlbnRlcmVkU3RyaW5nLCBjb25zdCBpbnQgU0laRSl7CgljaGFyIHZvd2VsTGlzdFtdID0geydhJywgJ2UnLCAnaScsICdvJywgJ3UnfTsKCWludCB2b3dlbHNGb3VuZHswfTsKCWZvciAoaW50IGNvdW50ID0gMDtjb3VudCA8IFNJWkU7Kytjb3VudCl7CgkJZm9yIChhdXRvIHZvd2VsRWxlbWVudCA6IHZvd2VsTGlzdCl7IAoJCQlpZihzdGQ6OnRvbG93ZXIoKihlbnRlcmVkU3RyaW5nICsgY291bnQpKSA9PSB2b3dlbEVsZW1lbnQpCgkJCQkrK3Zvd2Vsc0ZvdW5kOwoJCX0KCX0KCXJldHVybiB2b3dlbHNGb3VuZDsKfQoKCgppbnQgY29uc29uYW50Q291bnQoY2hhciogZW50ZXJlZFN0cmluZywgY29uc3QgaW50IFNJWkUpewoJY2hhciBjb25zb25hbnRMaXN0W10gPSB7J2InLCAnYycsICdkJywgJ2YnLCAnZycsICdoJywgJ2onLCAnaycsICdsJywgJ20nLCAnbicsICdwJywgJ3EnLCAncicsICdzJywgJ3QnLCAndicsICd3JywgJ3gnLCAneScsICd6J307CglpbnQgY29uc29uYW50c0ZvdW5kezB9OwoJZm9yIChpbnQgY291bnQgPSAwO2NvdW50IDwgU0laRTsrK2NvdW50KXsKCQlmb3IgKGF1dG8gY29uc29uYW50RWxlbWVudCA6IGNvbnNvbmFudExpc3QpeyAKCQkJaWYoc3RkOjp0b2xvd2VyKCooZW50ZXJlZFN0cmluZyArIGNvdW50KSkgPT0gY29uc29uYW50RWxlbWVudCkKCQkJCSsrY29uc29uYW50c0ZvdW5kOwoJCX0KCX0KCXJldHVybiBjb25zb25hbnRzRm91bmQ7Cn0KCgoKY2hhciogZ2V0U3RyaW5nKCl7CglzdGQ6OmNvdXQgPDwgIlBsZWFzZSB0eXBlIHdoYXRldmVyIHlvdSB3YW50OiAiIDw8c3RkOjplbmRsOwoJY2hhciAqcmF3U3RyaW5nID0gbmV3IGNoYXJbMTAwMF07Ly8xMDAwIGNob3NlbiBhcmJpdHJhcmlseSBhcyBsZW5ndGggY29uc3RyYWludCAKCXN0ZDo6Y2luLmdldGxpbmUocmF3U3RyaW5nLCA5OTkpOwoJY2hhciAqZml4ZWRTdHJpbmcgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihyYXdTdHJpbmcpICsgMV07Ly9keW5hbWljYWxseSBhbGxvY2F0ZSBhIGZpeGVkIGFtb3VudCBvZiBzcGFjZSBiYXNlZCBvbiBpbnB1dCBzdHJpbmcuICsgMSBpcyBmb3IgbmV3bGluZSBjaGFyYWN0ZXIKCXN0cmNweV9zKGZpeGVkU3RyaW5nLCBzdGQ6OnN0cmxlbihyYXdTdHJpbmcpICsgMSwgcmF3U3RyaW5nKTsvL2NvcGllcyB0aGUgaW5wdXQgZnJvbSB0aGUgYXJiaXRyYXJpbHkgbGFyZ2Ugc3RyaW5nIHRvIHRoZSBmaXhlZCBvbmUKCXJldHVybiBmaXhlZFN0cmluZzsKfQoJCQpjaGFyIGdldE1lbnVDaG9pY2UoKXsKCWNoYXIgY2hvaWNleydcMCd9OwoJc3RkOjpjaW4gPj4gY2hvaWNlOwoJcmV0dXJuIHN0ZDo6dG9sb3dlcihjaG9pY2UpOwp9CgppbnQgbWFpbigpCnsKCQljaGFyICplbnRlcmVkU3RyaW5nID0gZ2V0U3RyaW5nKCk7CgkJc2l6ZV90IHNpemV7c3RkOjpzdHJsZW4oZW50ZXJlZFN0cmluZyl9OwoJCWRpc3BsYXlNZW51KCk7CgkJCgkKCQljaGFyIG1lbnVTZWxlY3Rpb257Z2V0TWVudUNob2ljZSgpfTsKCQlkb3sKCQkJc3dpdGNoIChtZW51U2VsZWN0aW9uKXsKCQkJCWNhc2UgJ2EnOgoJCQkJCXN0ZDo6Y291dCA8PCAiXG5UaGUgdm93ZWwgY291bnQgb2YgeW91ciBzdHJpbmcgaXMgIiA8PCB2b3dlbENvdW50KGVudGVyZWRTdHJpbmcsIHNpemUpIDw8IHN0ZDo6ZW5kbDsKCQkJCQlicmVhazsKCQkJCWNhc2UgJ2InOgoJCQkJCXN0ZDo6Y291dCA8PCAiXG5UaGUgY29uc29uYW50IGNvdW50IG9mIHlvdXIgc3RyaW5nIGlzICIgPDwgY29uc29uYW50Q291bnQoZW50ZXJlZFN0cmluZywgc2l6ZSkgPDwgc3RkOjplbmRsOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSAnYyc6CgkJCQkJc3RkOjpjb3V0IDw8ICJcblRoZSBjb3VudCBvZiBib3RoIHRoZSB2b3dlbHMgYW5kIGNvbnNvbmFudHMgaW4geW91ciBzdHJpbmcgaXMgIiA8PCB2b3dlbENvdW50KGVudGVyZWRTdHJpbmcsIHNpemUpICsgY29uc29uYW50Q291bnQoZW50ZXJlZFN0cmluZywgc2l6ZSkgPDwgc3RkOjplbmRsOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSAnZCc6CgkJCQkJc3RkOjpjaW4uaWdub3JlKCk7Ly9jbGVhciBuZXdsaW5lIGNoYXJhY3RlciBmcm9tIHByZXZpb3VzIGMtc3RyaW5nCgkJCQkJZW50ZXJlZFN0cmluZyA9IGdldFN0cmluZygpOyAKCQkJCQlzaXplID0gc3RkOjpzdHJsZW4oZW50ZXJlZFN0cmluZyk7CgkJCQkJZGlzcGxheU1lbnUoKTsKCQkJCQlicmVhazsKCQkJCWRlZmF1bHQ6CgkJCQkJc3RkOjpjb3V0IDw8ICJcbkludmFsaWQgSW5wdXQuIFBsZWFzZSBUcnkgYWdhaW4uIiA8PCBzdGQ6OmVuZGw7CgkJfQoJCQltZW51U2VsZWN0aW9uID0gZ2V0TWVudUNob2ljZSgpOwoJfXdoaWxlKG1lbnVTZWxlY3Rpb24gIT0gJ2UnKTsKfQo=