2016-06-04 19 views
0

Die for-Schleife kehrt die ursprüngliche Zeichenfolge um und speichert sie in 'temp.'Temp wird korrekt gedruckt. Danach werden s und temp verglichen, aber das Ergebnis zeigt immer NO an. :(Wie kann ich C-Style Strings vergleichen?

#include<cstring> 
#include <iostream> 
using namespace std; 

    int main() 
    { 
     char s[100], temp[100]; 
     cin >> s; 
     cout << strlen(s); 
     for(int i=0;i<strlen(s);i++) 
     { 
      temp[i]=s[strlen(s)-i]; 
     } 
     cout << "temp is" << temp; 
     if(temp==s) 
     { 
      cout << "YES"; 
     } 
     else 
     { 
      cout << "NO"; 
     } 
     return 0; 
    } 
+0

Sie beenden nie die Zeichenfolge in 'temp' richtig, was zu * undefiniertem Verhalten führt *. –

+3

Und wenn Du programmierst in C++, benutze ['std :: string'] (http://en.cppreference.com/w/cpp/string/basic_string) und [' std :: reverse'] (http: // en .cppreference.com/w/cpp/algorithm/reverse) statt. –

+0

'std :: string s; cin >> s; if (s == std :: string (s.rbegin(), s.rend()) cout << "JA"; sonst cout << "NEIN"; 'Das ist Ihr gesamtes Programm mit C++. – PaulMcKenzie

Antwort

0

sollten Sie strcmp anstelle von == weil dieser lediglich ein Vergleich Zeiger ist. Auch ‚\ 0‘ verwendet werden muss die Zeichenfolge zu beenden. Und Ihr aktueller Code schaffen würde tatsächlich eine leere Zeichenfolge an der Position, weil die Zeichenfolge strlen(s) ‚\ 0‘ enthält.

Dann wieder, sollten Sie nicht mit char-Arrays in C++ auf eigene Faust arbeiten, sondern verwenden std::string wie bereits in den Kommentaren darauf hingewiesen.

+0

Es gibt mehrere Fehler im Code, der Vergleich von 'char []' mit dem Operator '==' ist nicht der einzige. – Mike

+0

guten Punkt, fügte ich noch etwas Text hinzu – IceFire

Verwandte Themen