einfaches Bruteforce Prog mit fehler =C



  • std::string bringt doch das gleiche, wie die andere variante, oder?
    Weil ich hab des jetzt en bissel verändert, und dann kamen 1000 fehlermeldungen und ich hab des wieder verworfen.
    aber so müssts doch auch gehen.

    Aso ich hab noch nen Fehler entdeckt. Wenn man 1 eingibt, dann kommt:
    a4D
    b4D
    c4D
    ...

    und dann kommt nur noch komisches zeug. Ihr könnt den code ja mal compilen. Dann seht ihrs.


  • Mod

    1337shaddow schrieb:

    std::string bringt doch das gleiche, wie die andere variante, oder?

    Nein. Unter anderem würde dies die folgenden Probleme lösen:
    a) Deine Ausgabe ist total undefiniert, weil du überhaupt nicht auf die für C-Strings nötige Nullterminierung achtest.
    b) Du bräuchtest dich beim Reservieren des Speichers für das aktuelle Wort nicht auf spezielle Features deines Compilers verlassen, sondern auf den C+=-Standard verlassen. Dadurch könntest du dein Programm dann auch mit jedem beliebigen Compiler übersetzen. Vermutlich ist es dir noch nicht einmal bewusst, aber char aktuelles_wort[anzahl_zeichen]; ist nicht durch den (aktuellen) Standard gedeckt.

    Natürlich ist es nicht damit getan, einfach in der Definition char gegen std::string zu tauschen, ein bisschen Anpassung deines Programmes wäre schon noch nötig.


  • Mod

    In meinem steten Streben nach unnötig komplizierten Antworten auf einfache Fragen, habe ich dieses Monstrum erschaffen:

    #include <iostream>
    #include <string>
    #include <vector>
    #include <cstddef>
    #include <algorithm>
    
    using namespace std;
    
    class increasable_word
    {
    private:
      typedef std::vector<size_t> word_type;
      word_type word_as_number;
      string const alphabet;
    public:
      increasable_word(size_t size, const string& alphabet): word_as_number(size), alphabet(alphabet) {}
      increasable_word operator++()
      {
        word_type::iterator i = word_as_number.begin();
       bool go_on;
        do
          {
            go_on=false;
            (*i)++;
            *i %= alphabet.size();
            if ((*i) == 0) {
              go_on=true;
              ++i;
            }
          }
        while (go_on  && (i != word_as_number.end()));
        return *this;
      }
      string as_string() const
      {
        string output (word_as_number.size(), 0);
        word_type::const_iterator i = word_as_number.begin();
        for (string::reverse_iterator j = output.rbegin(); j!=output.rend(); ++i, ++j)
          *j=alphabet[*i];
        return output;
      }
      bool maxed()
      {
        return (count(word_as_number.begin(), word_as_number.end(), alphabet.size()-1) == word_as_number.size());
      }
    };
    
    ostream& operator<<(ostream &out, const increasable_word& word)
    {
      out << word.as_string();
      return out;
    }
    
    int main()
    {
      cout<<"Wieviele Zeichen soll das Wort haben?"<<endl;
      size_t anzahl_zeichen;   
      cin >> anzahl_zeichen;
    
      increasable_word aktuelles_wort(anzahl_zeichen, "ABCDEFG");
    
      do cout << ++aktuelles_wort<<endl;
      while (! aktuelles_wort.maxed());
    }
    

    Immerhin hält es das Hauptprogramm schön übersichtlich.

    Ich hatte auch an eine Lösung gedacht, mittels TMP alle erdenklichen Kombinationen zur Compilerzeit zu berechnen. Tatsächlich wäre dies sogar ziemlich einfach mit TMP. Aber mehrere Millionen Jahre Übersetzungszeit wollte ich dem Compiler dann doch nicht zumuten. 🕶



  • SeppJ schrieb:

    In meinem steten Streben nach unnötig komplizierten Antworten auf einfache Fragen, habe ich dieses Monstrum erschaffen:

    hast du das Monstrum auch schonmal ausprobiert? Weil bei mir(Dev C++ Compiler) funzt es nicht. da kann man eine Zahl eingeben, und dann kommt nix mehr



  • Jetzt weis ich, wo mein Fehler ist, aber ich weis nicht wie ich ihn loswerde. dafür hab ich einen anderen fehler gekillt! 🙂 bei der if(counter == 63) hab ich vergessen, den counter wieder zurückzusetzen. Deshalb auch die komischen werte(die komischen Zeichen).

    Mein Fehler ist jetzt nur noch, dass es nicht den Buchstaben, der vor dem letzten Buchstaben ist, verändert. Ich hab das jetzt mal mit einer (nicht so tollen) if abfrage gemacht. komischerweise verändert es den vorrangegangenen buchstaben trotzdem nicht. 😞

    Jetzt kommt diese ausgabe(bei 3 Buchstaben):
    aaa
    aab
    aac
    ...
    aa0
    aa
    aaa
    aab
    aac
    aad
    ...

    Ist doch schon besser, oder?? 😃
    Aber eben noch nicht richtig 😞

    Hier ist der code:

    #include <iostream>
    #include <string.h>
    #include <conio.h>
    using namespace std;
    
    int anzahl_zeichen, aktuelles_zeichen, counter = 0, counterIII=-1;
    bool abbruch = false;
    //Buchstaben und Zahlen in einem Array speichern
    char alle_zeichen[63] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
    
    int main(){
        //Liest ein wie viele zeichen das Wort aus der Brute-Force Attacke haben soll
        cout<<"Wieviele Zeichen soll das Wort haben?\n";
        cin>>anzahl_zeichen;
        //erstellt einen leeren String mit der anzahl an zeichen als Länge
        char aktuelles_wort[anzahl_zeichen];
        //Füllt das leere wort mit zeichen(immer "a")
        while(counterIII!=anzahl_zeichen-1){
             counterIII++;
             aktuelles_wort[counterIII]='a';}
             //gibt das Wort aus, da es sonst bei aa...aaab anfangen würde
             cout<< aktuelles_wort << endl;
        //Die Schleife, die die Wörter generiert und ausgibt, mit der Abbruchsbedingung, die bei bhjkfgsduf(unten) überprüft wird
        while(abbruch == false){
              //setzt den zähler, der die Position des Buchstaben angibt
              aktuelles_zeichen = anzahl_zeichen-1;
              //erhöht den counter, der den buchstaben bestimmt um eins höher
              counter++;
              //falls der counter mit der null fertig ist, wird als zeichen ein a gespeichert und das zeichen um eins zurückgesetzt
              //dann wird das so oft wiederholt, bis man beim ersten zeichen ankommt. Wenn das auch null ist wird die abbruchsbedingung erfüllt
              //und der Bool-schalter abbruch auf true gesetzt(bhjkfgsduf)
              if(counter == 63){
                     counter = 0;
                     aktuelles_wort[aktuelles_zeichen] = 'a';
                     aktuelles_zeichen--;
                     while(aktuelles_wort[aktuelles_zeichen] == '0' && aktuelles_zeichen >= 0){
                                                             aktuelles_wort[aktuelles_zeichen] = 'a'; 
                                                             aktuelles_zeichen--;
                                                             //Erhöht das andere Zeichen um eins
                                                             if(aktuelles_wort[aktuelles_zeichen] == 'a'){aktuelles_wort[aktuelles_zeichen] = 'b';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'b'){aktuelles_wort[aktuelles_zeichen] = 'c';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'c'){aktuelles_wort[aktuelles_zeichen] = 'd';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'd'){aktuelles_wort[aktuelles_zeichen] = 'e';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'e'){aktuelles_wort[aktuelles_zeichen] = 'f';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'f'){aktuelles_wort[aktuelles_zeichen] = 'g';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'g'){aktuelles_wort[aktuelles_zeichen] = 'h';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'h'){aktuelles_wort[aktuelles_zeichen] = 'i';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'i'){aktuelles_wort[aktuelles_zeichen] = 'j';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'j'){aktuelles_wort[aktuelles_zeichen] = 'k';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'k'){aktuelles_wort[aktuelles_zeichen] = 'l';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'l'){aktuelles_wort[aktuelles_zeichen] = 'm';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'm'){aktuelles_wort[aktuelles_zeichen] = 'n';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'n'){aktuelles_wort[aktuelles_zeichen] = 'o';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'o'){aktuelles_wort[aktuelles_zeichen] = 'p';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'p'){aktuelles_wort[aktuelles_zeichen] = 'q';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'q'){aktuelles_wort[aktuelles_zeichen] = 'r';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'r'){aktuelles_wort[aktuelles_zeichen] = 's';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 's'){aktuelles_wort[aktuelles_zeichen] = 't';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 't'){aktuelles_wort[aktuelles_zeichen] = 'u';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'u'){aktuelles_wort[aktuelles_zeichen] = 'v';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'v'){aktuelles_wort[aktuelles_zeichen] = 'w';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'w'){aktuelles_wort[aktuelles_zeichen] = 'x';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'x'){aktuelles_wort[aktuelles_zeichen] = 'y';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'y'){aktuelles_wort[aktuelles_zeichen] = 'z';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'z'){aktuelles_wort[aktuelles_zeichen] = 'A';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'A'){aktuelles_wort[aktuelles_zeichen] = 'B';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'B'){aktuelles_wort[aktuelles_zeichen] = 'C';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'C'){aktuelles_wort[aktuelles_zeichen] = 'D';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'D'){aktuelles_wort[aktuelles_zeichen] = 'E';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'E'){aktuelles_wort[aktuelles_zeichen] = 'F';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'F'){aktuelles_wort[aktuelles_zeichen] = 'G';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'G'){aktuelles_wort[aktuelles_zeichen] = 'H';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'H'){aktuelles_wort[aktuelles_zeichen] = 'I';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'I'){aktuelles_wort[aktuelles_zeichen] = 'J';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'J'){aktuelles_wort[aktuelles_zeichen] = 'K';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'K'){aktuelles_wort[aktuelles_zeichen] = 'L';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'L'){aktuelles_wort[aktuelles_zeichen] = 'M';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'M'){aktuelles_wort[aktuelles_zeichen] = 'N';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'N'){aktuelles_wort[aktuelles_zeichen] = 'O';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'O'){aktuelles_wort[aktuelles_zeichen] = 'P';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'P'){aktuelles_wort[aktuelles_zeichen] = 'Q';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'Q'){aktuelles_wort[aktuelles_zeichen] = 'R';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'R'){aktuelles_wort[aktuelles_zeichen] = 'S';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'S'){aktuelles_wort[aktuelles_zeichen] = 'T';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'T'){aktuelles_wort[aktuelles_zeichen] = 'U';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'U'){aktuelles_wort[aktuelles_zeichen] = 'V';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'V'){aktuelles_wort[aktuelles_zeichen] = 'W';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'W'){aktuelles_wort[aktuelles_zeichen] = 'X';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'X'){aktuelles_wort[aktuelles_zeichen] = 'Y';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'Y'){aktuelles_wort[aktuelles_zeichen] = 'Z';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == 'Z'){aktuelles_wort[aktuelles_zeichen] = '1';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == '1'){aktuelles_wort[aktuelles_zeichen] = '2';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == '2'){aktuelles_wort[aktuelles_zeichen] = '3';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == '3'){aktuelles_wort[aktuelles_zeichen] = '4';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == '4'){aktuelles_wort[aktuelles_zeichen] = '5';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == '5'){aktuelles_wort[aktuelles_zeichen] = '6';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == '6'){aktuelles_wort[aktuelles_zeichen] = '7';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == '7'){aktuelles_wort[aktuelles_zeichen] = '8';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == '8'){aktuelles_wort[aktuelles_zeichen] = '9';}
                                                             else if(aktuelles_wort[aktuelles_zeichen] == '9'){aktuelles_wort[aktuelles_zeichen] = '0';}
                                                             aktuelles_zeichen = anzahl_zeichen-1;}//von der while(aktuelles_wort[aktuelles_zeichen} == '0' ...
                     if(aktuelles_zeichen==0 && aktuelles_wort[aktuelles_zeichen] == '0'){abbruch=true;}//bhjkfgsduf
                     }//von der if(counter ==63)
              //dann wird das zeichen in dem Wort gespeichert und ausgegeben.
              aktuelles_wort[aktuelles_zeichen] = alle_zeichen[counter];
              cout<< aktuelles_wort << endl;
              getch();//nur zum testen. Wird wieder entfernt
        }//von der while(true)
        getch();
    }//von der int main
    

Anmelden zum Antworten