2010-12-13 9 views
2

Dies ist, was ich bisher habe und ich bekomme immer einen Fehler. Irgendeine Hilfe?Fehle ich etwas in meiner Funktion?

void ReverseString(char* string) { 
    int len = strlen(string); 
    for(int i = 0; i < len; i++) 
    { 
     string[i] = string[len-i]; 
    } 
} 
+3

Es wäre hilfreich, um den Fehler zu kennen. Liegt es daran, dass Sie '{' am Ende des 'for' Blocks verwenden? – birryree

+4

Ich glaube, Sie vermissen 'std :: string' und' std :: reverse', ich selbst. –

Antwort

6
  • Wenn i wird 0 Sie Zugriff werde string[len] die als in einem Array der Länge der gültigen Index Sie falsch ist [0,len-1]

Wenn ich Sie verstehen Absicht richtig len sind versuchen, die Zeichenfolge umzukehren, aber ich kann ein paar Dinge fehlen sehen:

  • Sie tauschen nicht aus.
  • Auch das Tauschen sollte für eine Hälfte des Arrays passieren, nicht für das gesamte Array.

Der folgende Ausschnitt behebt diese Probleme:

int len = strlen(string); 
for(int i = 0; i < len/2; i++) { 
    swap(string[len-i-1],string[i]); 
} 
2

Zunächst einmal würden Sie einen Fehler in Zeile 6.

Ändern Sie den { in } bekommen. Dann versuche es noch einmal.

+0

Das ist ein Kopierfehler meinerseits. Das ist nicht der Grund, warum ich den Fehler bekomme. –

+0

@Josh Lake Du hast eine Antwort angenommen, also denke ich, dass das Problem gelöst ist und dass ich meine nicht ändern muss. – Secko

1

Neben zwei bereits erwähnten Fehler:

Sie erhalten eine palindrom aus der ursprünglichen Zeichenfolge machen. Die erste Hälfte wird gleich der zweiten Hälfte umgedreht. Die zweite Hälfte bleibt jedoch gleich. Dies ist nicht, was der Funktionsname deklariert.

0

sollte string[i] = string[len-i-1];

// added (untested): 

void ReverseString(char * string) { 
    int len = strlen(string); 
    for(int i = 0; i < len/2; i++) 
    { 
     string[i] ^= string[len-i-1]; 
     string[len-i-1] ^= string[i]; 
     string[i] ^= string[len-i-1]; 
    } 
} 
+1

oops, umkehren String im Ort erfordert Swaps, meine schlechte – ThomasMcLeod

+0

Ich bin ein Newbe - warum Code Einzug nicht? – ThomasMcLeod

+0

Wählen Sie den Code und drücken Sie 'Strg + K'. – ruslik

1

seine Diese C++ markiert ist, tut es die C++ Art und Weise ...

std::string ReverseString(std::string str) 
{ 
    std::reverse(str.begin(), str.end()); 
    return str; 
} 
+1

Wie wäre es mit 'return std :: string (str.rbegin(), str.rend());' Dann können Sie sogar die Eingabe als const-Referenz verwenden. –

Verwandte Themen