2017-09-28 4 views
0

Ich habe Schwierigkeiten bei der Suche nach bestimmten Zeichen innerhalb meiner Zeichenfolge. Die Anforderungen der Funktion ist es, sicherzustellen, dass "Alle Zeichen (außer dem ersten) Kleinbuchstaben, Leerzeichen oder Satzzeichen (nur ';' oder ',')" Ich muss auch sicherstellen, dass die letzte Zeichen in der C-String ist entweder ein! oder ein .Nach bestimmten Zeichen suchen

Hier ist was ich habe.

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"); 

} 

Aber ich bekomme immer wieder, dass es kein Satz ist, auch wenn es sein sollte. Irgendwelche Vorschläge, wie ich das beheben kann?

Antwort

0

Das Problem scheint aufzutreten, weil Sie von Index 0 durchlaufen und überprüfen, dass das erste Zeichen Großbuchstaben sein sollte und in einer späteren Anweisung überprüfen Sie erneut, dass es Kleinbuchstaben sein sollte.

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

und später

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

Während der ersten Iteration, wenn c gleich 0 ist, sind Sie im Grunde überprüft, dass das erste Zeichen weder Groß- noch klein geschrieben werden sollte und Sie falsch, weil eine von ihnen wird immer falsch sein. Der folgende Code sollte es tun.

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"); 
} 

Hoffe es hilft !!

Verwandte Themen