2017-10-02 3 views
1

Comment valider une chaîne pour vérifier si elle n'a que des majuscules? Et comment vérifiez-vous s'il a à la fois des majuscules et des minuscules?Validation de chaîne

cout << "Enter state name or state abbr:" << " " << endl; 
cin >> st; 

if ((st == stateArray[in].getStateAbbr()) && (std::all_of(st.begin(), st.end(), isupper))) // uppercase only 
{ 
    cout << "Found. Your string is a state abbr." << endl; 
} 
else if ((st == stateArray[in].getStateName())) 
{ 
    cout << "Found." << " Your string is a state name" << endl; 
} 
else 
{ 
    cout << "Not found" << endl; 
} 
+4

Qu'est-ce ta question? Est-ce que ça ne marche pas? Il serait préférable de montrer un court exemple complet mettant en évidence quel que soit le problème. –

+0

S'il vous plaît prenez le temps de [lire sur la façon de poser de bonnes questions] (http://stackoverflow.com/help/how-to-ask), et apprendre comment créer un [Exemple minimal, complet et vérifiable] (http : //stackoverflow.com/help/mcve). Je vous recommande également de lire [Comment déboguer de petits programmes] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/) par Eric Lippert, et d'apprendre à utiliser un débogueur. –

+0

@RetiredNinja donc pour le nom d'état j'ai besoin d'avoir des majuscules et minuscules, mais pour l'abréviation d'état, il doit être en majuscule. –

Répondre

0

Comment valider une chaîne pour vérifier si elle ne dispose que de lettres majuscules? Et comment vérifiez-vous s'il a à la fois des majuscules et des minuscules?

Si vous avez seulement des caractères ASCII, vous pouvez faire:

std::string st; 
getline(std::cin, st); 

puis:

//check all uppercase 
bool upperCase = true; 

for (char c : st) 
{ 
    if (c < 65 || c > 90) 
    { 
     upperCase = false; 
     break; 
    } 
} 

//check all lowercase 
bool lowerCase = true; 

for (char c : st) 
{ 
    if (c < 97 || c > 122) 
    { 
     lowerCase = false; 
     break; 
    } 
} 

//check both uppercase and lowercase 
bool both = true; 

for (char c : st) 
{ 
    if ((c < 65) || (c > 90 && c < 97) || (c > 122)) 
    { 
     both = false; 
     break; 
    } 
} 

Ensuite, vous pouvez vérifier la variable bool:

if (upperCase) std::cout << "All chars are upper case." << std::endl; 
if (lowerCase) std::cout << "All chars are lower case." << std::endl; 
if (both)  std::cout << "All chars are upper case or lower case." << std::endl; 
+0

Cela ne va pas très bien fonctionner si votre chaîne contient des caractères ASCII étendus, pourquoi ne pas utiliser std :: islower et std :: isupper qui va gérer les deux cas? –