Brute Force Fehler
-
Hallo Leute,
der folgende Code soll zuerst eine dreistellige Zeichenkette einlesen, und anschließend solange Kombinationen ausgeben, bis die richtige gefunden ist.
Es werden auch alle Kombinationen durchprobiert, doch die sschleife bricht nicht ab.#include <cstdlib> #include <iostream> #include <vector> char alphabet[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; // 61; 0 - 60 using namespace std; int main(int argc, char *argv[]) { char pass[3]; cin >> pass; int iarray[3]; char carray [3]; int laenge = 3; int pos = 0; iarray[0] = iarray[1] = iarray[2] = 0; while (carray != pass) // Hier brichts nicht ab { iarray[pos]++; if (iarray[pos] > 60) { iarray[pos] = 0; iarray[pos+1]++; while (iarray[++pos] > 60) { iarray[pos] = 0; iarray[pos+1]++; } pos = 0; } for (int i = 0; i < 3; i++) { carray[i] = alphabet[iarray[i]]; } cout << carray << endl; getchar(); } cout << carray; system("PAUSE"); return EXIT_SUCCESS; }Vielen Dank für die Hilfe
-
C-Strings werden mit strcmp verglichen. std::string ist intuitiver, da funktioniert ein Vergleich mit ==.
-
Der Vergleich in Zeile 18 geht so nicht (du vergleichst hier nur die Adressen der Arrays, nicht deren Inhalt). Benutze strcmp/strncmp!
EDIT: Und wenn du deine char-Arrays als Strings verwenden und ausgeben willst, musst du auch eine terminierende Null anhängen. Die Arrays sind also zu kurz (nötig sind mindestens 4 statt 3 Elemente und am besten eine Nullinitialisierung am Anfang).
-
Und in einen
char[3]passen nur zwei Zeichen+Nullterminierung.
-
Super, vielen dank für die schnellen Antworten.
Jetzt weiß ich wieder warum mir Strings lieber sind ;).
Habe in der zwischenzeit einen längeren Ausflug zu PHP gemacht und wohl
ein paar C++ Sachen verdrängt