buchstaben "erhöhen"



  • okey nächste Frage...
    ich will eine Eingabe "nachbilden"
    z.B. sei die Eingabe das Wort "Hallo"
    dann soll solange gesucht werden bis das erstellte wort und die eingabe übereinstimmen. Das Grundgerüst habe ich schon, mir fehlt nur die Funktion um den string zu "erhöhen". Er sollte also zb bei "a" anfangen und dann solange erhöht werden bis er bei "Hallo" ist.

    danke schonma
    Regire



  • Was ist denn dein Grundgerüst? Diese Inkrement-Funktion (wie auch immer du sie implementiert hast) kann man sehr schön mit STL-Algorithmen machen:

    #include <algorithm>
    // ...
    char increment (char);
    
    // ...
    std::string str;
    
    // ...
    std::transform (str.begin (), str.end (), str.begin (), &increment);
    


  • #include <iostream.h>
    
    char eingabe;
    char probe='a';
    
    int main()
    {
    	cout << "Bitte etwas eingeben."<<'\n';
    	cin >> eingabe;
    
    	while(eingabe != probe)
    	{
    		probe++;
    	}
    	cout << "Die Eingabe war: " << probe << '\n';
    
    }
    

    ^^ das funktioniert aber nur bei einzelnen Zeichen.
    Ich brauche aber etwas was auch mit ganzen wörtern geht... 😞



  • Ähm ja, genau das macht mein Code 😉
    Dein Grundgerüst ist doch etwas dünn.
    Was willst du überhaupt machen? Caesar-Code knacken?



  • .filmor: Wie sieht denn deine increment() aus?



  • was ich machen will? kA wollte das nur ma ausprobieren...
    kannst du mir noch sagen wie ich das von dir bei mir eingliedern muss? Ich kapier das noch net so ganz....



  • Regire schrieb:

    #include <iostream.h>
    
    char eingabe;
    char probe='a';
    
    int main()
    {
    	cout << "Bitte etwas eingeben."<<'\n';
    	cin >> eingabe;
    
    	while(eingabe != probe)
    	{
    		probe++;
    	}
    	cout << "Die Eingabe war: " << probe << '\n';
    	
    }
    

    Hoffentlich macht der Code, den du vorhast zu schreiben, mehr Sinn als der hier 🙂



  • Michael E. schrieb:

    .filmor: Wie sieht denn deine increment() aus?

    Mein increment sieht überhaupt nicht aus. Das kann eine beliebige von den oben erwähnten Methoden sein.

    Regire schrieb:

    was ich machen will? kA wollte das nur ma ausprobieren...

    Was willst du ausprobieren? Du musst dir schon im Klaren darüber sein, was dein Programm letztlich tun soll.



  • .filmor: Ich glaub, Regire hat keine ROT-Verschlüsselung vor, sondern eher sowas:
    a->b->c->...->z->aa->ab->ac->...->az->ba->...->zz->aaa



  • Du koenntest mal sowas hier probieren 😉 ist zwar noch nicht perfekt, aber ein Anfang...

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    void NextString(string &stringPar, int index = -2)
    {
       if(index == -2)
       {
           if(stringPar[stringPar.length() - 1] == 'z')
           {
              stringPar[stringPar.length() - 1] = 'a';
              NextString(stringPar, stringPar.length() - 2);
           }
           else
           {
               stringPar[stringPar.length() - 1]++;
           }
       }
       else if(index == -1)
       {
           stringPar[0] = 'a';
           stringPar = 'a' + stringPar;
       }
       else
       {
           if(stringPar[index] == 'z')
           {
              stringPar[index] = 'a';
              NextString(stringPar, index - 1);
           }
           else
           {
               stringPar[index]++;
           }
       }
    }
    
    int main(void)
    {
        string myString = "a";
        string eingabe = "";
        cin >> eingabe;
        cout >> myString;
        while(myString != eingabe)
        {
            NextString(myString);
            cout << myString << endl;
        }
        return 0;
    }
    


  • Phoemuex schrieb:

    ...
               stringPar[stringPar.length() - 1]++;
    ...
               stringPar = 'a' + stringPar;
    ...
               stringPar[index]++;
    ...
    

    Wie schon gesagt: Ist nicht portabel.

    Gruß,

    Simon2.



  • Die mittlere Zeile doch schon, oder? 😃

    Ansonsten erstellt man sich noch eine tolle Funktion (so wie von dir oben vorgeschlagen):

    char GetNextLetter(char Letter)
    {
        const char *Alphabet = "abcdefghifklmnopqrstuvwxyz";
        int i = 0;
        while(Alphabet[i] != Letter)
        {
            ++i;
        }
        return Alphabet[i+1]; //Darf nicht mit 'z' als Argument aufgerufen werden, wird es aber von meinem Programm auch nicht
    }
    

    und aendert dann

    stringPar[stringPar.length() - 1]++;
    

    in

    stringPar[stringPar.length() - 1] = GetNextLetter(stringPar[stringPar.length() - 1]);
    

    und

    stringPar[index]++;
    

    in

    stringPar[index] = GetNextLetter(stringPar[index]);
    

    Ausserdem:

    Phoemuex schrieb:

    ist zwar noch nicht perfekt, aber ein Anfang...

    😉

    Felix



  • Phoemuex schrieb:

    Die mittlere Zeile doch schon, oder? ...

    da hast Du natürlich recht - hatte ich falsch gelesen. 🕶

    Gruß,

    Simon2.



  • jo danke,
    hab mich jetzt mal an die anleitung von Phoemuex gehalten, bekomme jetzt aber die Fehlermeldungen:

    'string' : nichtdeklarierter Bezeichner
    und
    'stringPar' : nichtdeklarierter Bezeichner

    hab keine ahnug wie ich das beheben kann 😞
    Bitte um Hilfe

    Regire

    PS:

    Michael E. schrieb:

    .filmor: Ich glaub, Regire hat keine ROT-Verschlüsselung vor, sondern eher sowas:
    a->b->c->...->z->aa->ab->ac->...->az->ba->...->zz->aaa

    jo genau das will ich machen 🙂


Anmelden zum Antworten