2017-09-28 5 views
0

Je rencontre des difficultés pour vérifier des caractères spécifiques dans ma chaîne. Les exigences de la fonction est de vérifier que "Tous les caractères (sauf le premier) sont en minuscules, espaces, ou ponctuation (seulement ';' ou ',')" Je dois également m'assurer que le dernier caractère dans le C-String est soit un! ou a.Recherche de caractères spécifiques

Voici ce que j'ai.

bool isItSentence(const char* s) 
{ 
    int x = strlen(s); 


    for (int c = 0; s[c] != '\0'; c++) 
    { 
     if (!isupper(s[0])) return false; 
     if (isupper(s[c]) && c > 0) return false; 
     if (s[c] != ' ' && s[c] != ';' && s[c] != ',' && !islower(s[c])) return false; 

    } 

    if (s[x - 1] != '.' && s[x - 1] != '!') return false; 
    return true; 
} 
int main() 
{ 
    std::string str = "Smelly."; 


    std::cout << isItSentence(str.c_str()) << std::endl; 
    system("pause"); 

} 

Cependant, je continue à comprendre que ce n'est pas une phrase, même quand elle devrait l'être. Des suggestions sur la façon dont je peux résoudre ce problème?

Répondre

0

Le problème semble se produire parce que vous êtes en boucle à partir de l'index 0 et en vérifiant que le premier caractère doit être en majuscule et dans une instruction ultérieure, vous vérifiez à nouveau qu'il doit être en minuscules.

if (!isupper(s[0])) return false; 

et plus tard

if (s[c] != ' ' && s[c] != ';' && s[c] != ',' && !islower(s[c])) return false; 

Au cours de la première itération, lorsque c est égal à 0, vous vérifiez essentiellement que le premier caractère ne doit être ni majuscules ni minuscules et vous obtenez faux parce que l'un d'entre eux sera toujours être faux. Le code suivant devrait le faire.

bool isItSentence(const char* s) 
{ 
    int x = strlen(s); 
    if (!isupper(s[0])) return false; 
    if (s[x - 1] != '.' && s[x - 1] != '!') return false; 
    for (int c = 0; c < x - 1; c++) 
    { 

     if (isupper(s[c]) && c > 0) return false; 
     if (s[c] != ' ' && s[c] != ';' && s[c] != ',') 
     if(!islower(s[c]) && c!= 0) 
     return false; 

    } 
    return true; 
} 
int main() 
{ 
    std::string str = "Smelly."; 
    std::cout <<" This is "<<isItSentence(str.c_str()) << std::endl; 
    system("pause"); 
} 

Espérons que ça aide !!