2016-04-20 16 views
0

Ich versuche, meine Zeichen in der char-Array zu tauschen, damit sie würde wie folgt aussehen: KO KO KO KO KO aber ist der Ausgang nicht ganz so, was ich erwartet hatte: K OK OK OK OKSwapping Zeichen in char-Array

Jeder Hinweis auf was mache ich falsch?

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

void swapIt (char &char1, char &char2) { 
    char temp; 
    temp = char1; 
    char1 = char2; 
    char2 = temp; 
} 

int main() { 
    char test[15] = "OK OK OK OK OK"; 
    int x; 
    for (x = 0; x < 10; x++) { 
     swapIt(test[x], test[x+1]); 
    } 
    cout << test; 
} 

So ahnungslos gerade jetzt.

+3

Willkommen bei Stack Overflow! Es klingt, als müssten Sie lernen, wie Sie mit einem Debugger Ihren Code durchgehen. Mit einem guten Debugger können Sie Ihr Programm Zeile für Zeile ausführen und sehen, wo es von dem, was Sie erwarten, abweicht. Dies ist ein essentielles Werkzeug, wenn Sie programmieren wollen. Weiterführende Literatur: ** [Wie kleine Programme zu debuggen] (http://ericlippert.com/2014/03/05/how-to-debug-small-programs/) ** – NathanOliver

+1

Schauen Sie, was Sie tun. Nach dem ersten Austausch: "OK OK OK OK", dann "OK OK OK OK", dann "OK OK OK OK" ... usw. – melak47

+0

Ich erinnere mich, als ich zum ersten Mal in der Steinzeit über den Debugger stolperte, der mit Turbo C gebündelt wurde. Der Mensch, der Zeile für Zeile durch Programme ging, machte es so einfach, die Fehler in meiner Mistlogik zu finden. Ich wollte meinen CS-Professor drosseln, weil er so ein Arsch war, dass er uns nie gesagt hatte, dass solche Dinge existierten. – user4581301

Antwort

1

Jedes Wort besteht aus 3 Zeichen 'O', 'K', ' '. Nach dem Tausch der ersten beiden müssen Sie 3 Zeichen nach vorne bewegen.

Auch die Schleifenbedingung war falsch - 10 anstelle der Stringgröße - 15. Die richtige Version ist:

for (x = 0; x < 15; x+=3) { 
2

Für x = 0, test[0] und test[1] vertauscht. An diesem Punkt, test = KO OK ...

Für x = 1, test[1] und test[2] sind vertauscht. An dieser Stelle test = K OOK ...

Sehen Sie das Problem?

Nach einem Austausch sollte x durch Orte, nicht 1. e. x += 3 anstelle von x++. Bitte beachten Sie, dass die Verwendung der Nummern 15 und 10 beliebig ist. Beachten Sie außerdem, dass das Zeichen bei x+1 Position innerhalb der Grenzen des Arrays sein muss. Ich würde versuchen

char test[] = "OK OK OK OK OK"; 
const int length = strlen(test); 
for (int x = 0; x+1 < length; x += 3) { 
    swapIt(test[x], test[x+1]); 
} 
cout << test; 
+0

Nein, die Position sollte um 3 Stellen erhöht werden, es gibt auch einen Abstand zwischen den Wörtern. –

+0

@ RafałRawicki: Danke, aktualisiert! – Arun