2017-09-11 3 views
-7

Dies ist der Code:Warum kann ich char, aber nicht string mit string() verwenden?

char s[101], s1[101]; 
cin >> s >> s1; 
cout << stricmp(s, s1); 

Ich versuchte s und s1 als std::string zu erklären, aber es hat nicht funktioniert. Kann jemand bitte erklären, warum stricmp() mit char[] arbeitet, aber nicht std::string?

+0

Sie wahrscheinlich ein bisschen genauer sein sollten, wenn Sie sagen, Welches Ergebnis erwarten Sie und welches Ergebnis bekommen Sie? – TrampolineTales

+1

Nur weil ich das Gefühl habe, dass du nichts davon weißt und es relevant ist - weißt du was ein 'char *' ist? –

+3

Sie können 's' und' s1' als 'std :: string' deklarieren, aber statt' stricmp (s, s1); 'rufen Sie es wie' stricmp (s.c_str(), s1.c_str()) ; ' – Fureeish

Antwort

0

Das ist, weil stricmp()std::string Werte als Argumente nicht nimmt.

Verwenden Sie stattdessen std::basic_string::compare().

std::string s ("s"); 
std::string s1 ("s1"); 

if (s.compare(s1) != 0) // or just if (s != s1) 
    std::cout << s << " is not " << s1 << std::endl; 

Wenn Sie einen Groß- und Kleinschreibung Vergleich benötigen, müssen Sie Ihre eigene Funktion machen, vielleicht std::tolower() wie in this example, oder einfach nur boost::iequals() wie in this other example verwenden.

+0

'compare' ist kein Groß- und Kleinschreibung, während" stricmp "ist. – NathanOliver

+0

Auch in Ihrem Beispiel wird 'compare' nicht einmal benötigt. Sie könnten einfach 'if (s! = S1)' schreiben. – NathanOliver

+0

@NathanOliver, danke für die Vorschläge, zu dem Beispiel hinzugefügt – Rama

0

Sie sollten die Saiten betrachten Umwandlung zu allen oberen oder Kleinbuchstaben vor dem Vergleich: „es hat nicht funktioniert“

std::string s1; 
std::string s2; 
std::cin >> s1 >> s2; 
std::transform(s1.begin(), s1.end(), 
       s1.begin(), 
       std::tolower); 
std::transform(s2.begin(), s2.end(), 
       s2.begin(), 
       std::tolower); 
if (s1 == s2) 
{ 
    std::cout << "s1 and s2 are case insensitive equal.\n"; 
} 
else 
{ 
    std::cout << "s1 and s2 are different.\n"; 
} 
Verwandte Themen