2014-12-11 3 views
0

Функция, предназначенная для преобразования слова в верхний или нижний регистр, преобразует все слова в верхний или нижний регистр. То, что я хочу сделать, - это преобразовать определенное количество символов в строку в верхний или нижний регистр. Возьмем, например, строку слов. Если пользователь только хочет преобразовать букву S в строку слова в верхний регистр, тогда вывод должен быть: String. Кроме того, эта функция учитывает, если слово, которое они хотят преобразовать, уже находится в верхнем или нижнем регистре.Как преобразовать определенное количество символов в верхний или нижний регистр и подсчитать, сколько прописных и строчных букв имеет слово

Пример: Пользователь вводит слово STRING. хочет преобразовать слово в STRING. выход: STRING

#include <iostream> 
#include <string> 
#include <cctype> 
using namespace std; 

//Function Prototype 
int CountVowels(string, int &); 
void ShowMenu(string &, char &); 
void convertword(string &); 

int main() 
{ 
//Variables 
string word; 
char choice = '0'; 
int vowels = 0; 

do 
{ 
//Call Functions 
ShowMenu(word, choice); 

switch(choice) 
{ 
case '1': 
    cout << CountVowels(word, vowels); 
    cout << endl << endl; 
    break; 

case '2': 
    convertword(word); 
    cout << endl << endl; 
    break; 
} 

}while(choice != '5'); 

return 0; 
} 

void ShowMenu(string& word, char& choice) 
{ 
cout <<"\t\tMENU\t\t" << endl 
    <<"===========================================" << endl; 
cout <<"1. Find the number of Vowels in a word" << endl 
    <<"2. Convert to uppercase or lowercase " << endl 
    <<"3. Count the number of uppercase letters " << endl 
    <<"4. Count the number of lowercase letters" << endl 
    <<"5. Quit" 
    <<"\n===========================================" << endl; 
//Get menu choice and get word from user. 
cout << endl; 
cout <<"Enter a choice: "; 
cin >> choice; 

while((!isdigit(choice)) || (choice > '5')) 
{ 
    cerr << "\nOut of range or invalid input. "; 
    cin >> choice; 
} 

cin.ignore(); 

cout << endl; 

cout << "Enter a word: "; 
getline(cin, word, '\n'); 


} 

int CountVowels(string word, int& vowelCount) 
{ 
vowelCount = 0; 

int numLetters = word.length(); //get the number of letters in a word 

for (int i = 0; i < numLetters; i++) 
{ 
    char letter = word[i]; //get the ith letter in the word 

    if (letter == 'a' || letter == 'e' || 
     letter == 'i' || letter == 'o' || 
     letter == 'u' || letter == 'y') 
    { 
     vowelCount++; 
    } 


} 

cout << "\nThe number of vowels in this word is : "; 

return vowelCount; 
} 

void convertword(string &word) 
{ 
bool same = false; 
char response; 

cout << "\nWould you like to convert this word to uppercase or lowercase. " << endl; 
cout << "\nType U for uppercase and l for lowercase. "; 
cin >> response; 

while(response != 'U' && response != 'l') 
{ 
    cerr << "\nInvalid input. "; 
    cin >> response; 
} 

for(unsigned int i=0; i<word.length(); i++) 
{ 
    if((response == 'U' && word[i]==toupper(word[i]))) 
    { 
     same = true; 
    } 
    else if(response == 'U') 
    { 
     word[i]=toupper(word[i]); 
    } 
    else if((response == 'l' && word[i]==tolower(word[i]))) 
    { 
     same = true; 
    } 
    else if(response == 'l') 
    { 
     word[i]=tolower(word[i]); 
    } 
} 

cout << endl; 

if(same) 
{ 
    cout << "\nBased on your response, this word has already been converted. "; 
} 
else 
    cout << "\nyour newly converted or unconverted word is : " << word; 
    cout << endl; 
} 
+0

Ваш вопрос остается неясным. Что вы ожидаете от ввода и вывода? Что вы сейчас получаете? –

+0

Я уже дал вам пример в описании, но здесь он снова. Если пользователь вводит строку слов, и пользователь только хочет преобразовать букву S в строку слова в верхний регистр, вывод должен быть строкой. Выход, который я получаю, - STRING. – ChronoTrigger

+0

Не делайте слово [i] = toupper (слово [i]); в петле. Скорее просто слово [0] = toupper (слово [0]); вне цикла. –

ответ

0
// Capitalizes the first letter and all others are lower case. 
size_t n = the number of characters you want. 
if(!word.empty()) 
{ 
    if(n > word.size()) 
     n = word.size(); 
    for(size_t i = 0; i < word.size(); ++i) 
     word[i] = toupper(word[i]); 
    for(size_t i = n; i < word.size(); ++i) 
     word[i] = tolower(word[i]); 
} 
+0

Да, как я думал об этом. Дело в том, что если пользователь хочет загладить строку слова STRING или даже STRING для строки. Должен ли я спрашивать у пользователя, сколько букв он хочет преобразовать, а затем использовать этот вход в цикле for? – ChronoTrigger

+0

Как я уже сказал, ваше описание очень плохо из того, что вы хотите. –

+0

Не могли бы вы объяснить, почему? – ChronoTrigger

 Смежные вопросы

  • Нет связанных вопросов^_^