String zeichen Lesen!



  • Tut mir leid, aber ich dachte das Problem mit dem zeichen anhängen gelöst zu haben, doch habe ich nun ein Problem, Ich habe vor der main den String erg definiert:

    string erg = "Entziffert heisst es:";
    

    dann innerhalb der mein folgendes:

    if(text.substr(text.length()-1)=="a")
    {
    erg = erg.append(m);
    }
    
    if(text.substr(text.length()-1)=="b")
    {
    erg = erg.append(n);
    }
    

    wenn ich nun für text "ba" eintippe müsste er normalerweise sagen:

    Entziffert heisst es: mn

    Doch sagt er nur:

    Entziffert heisst es: m

    Daraus schließe ich dass er den 2. Buchstaben garnicht mehr abfragt. WARUM?

    LPP1991



  • So hier ist der Mittelteil, wo das Problem ist, ich hoffe ihr könnt helfen.

    while(ek==0)
    {    
    
    if(text.substr(text.length()-1)=="a")
    {
    erg = erg.append(m);
    }
    
    if(text.substr(text.length()-1)=="b")
    {
    erg = erg.append(n);
    }
    
    text.resize(1);
    laeng=text.length();
    if(laeng==1){break;}
    }
    


  • LPP1991 schrieb:

    So hier ist der Mittelteil, wo das Problem ist, ich hoffe ihr könnt helfen.

    while(ek==0)
    {    
                 
    if(text.substr(text.length()-1)=="a")
    {
    erg = erg.append(m);
    }
    
    if(text.substr(text.length()-1)=="b")
    {
    erg = erg.append(n);
    }
    
    text.resize(1);
    laeng=text.length();
    if(laeng==1){break;}
    }
    

    Was versuchst du da? Willst du das erste Zeichen überprüfen?

    std::string Blub = "Hallo!";
    if ( Blub[0] == 'H' ) // Man fängt bei 0 an zu Zählen! 0 = erste Zeichen, 1 = zweite Zeichen
    {
        std::cout << "H an erster Stelle!" << std::endl;
    }
    
    if ( Blub[1] == 'a' )
    {
        std::cout << "a an zweiter Stelle!" << std::endl;
    }
    


  • Nein, ich will ein Programm haben, mit dem ich eine Art Geheimschrift machen kann, also dass das Programm buchstaben tauscht. also der User gibt ein Wort mit "A" ein, also Affe, und das programm ändert dass dann in z.B. Milla

    Geht das eigentlich bei Strings nicht auch mit replace? Aber wie?

    LPP1991



  • Ich glaub ich kann das Problem beheben, wenn ihr mir sagt, wie ich mehrer zeichen nacheinander, in verschiedenen if schleifen hinzufügen kann, und vorallem, wie ich ein zeichen des Strings lösche. Vieleicht könnt ihr mir ja auch sagen, wie ich es schaffe, dass das Programm nicht den Letzten Buchstaben untersucht, sondern von vorne anfängt, und danach den ersten löscht, dann vom rest wieder den ersten usw...

    LPP1991



  • einfach buchstabe für buchsrtabe einlesen, mit switch abfangen, und dann ersetzen, dann noch ein programm, dass das ganze rchwärts macht und schon hast du ein tollen codieralgorithmus (der noch zu knacken ist). Dafür brauchst du nichtmal strings

    char wort[] = "affe"
    char *ptr = wort;
    
    while(ptr){
      switch(*ptr){
      case 'a': *ptr = 'm'; break;
      case 'b': *ptr = 'x'; break;
      //...
      case 'Z': *ptr = 'I';
      }
      ptr++;
    }
    

    ungetestet, aber für eine idee hoffe ich reichts



  • Also ich habe das nun probiert, doch bekomme ich immer "xxx.exe hat ein Problem festgestellt und muss beendet werden.



  • Ich arbeite mit am Programm, versuche jedoch eine andere Möglichkeit.
    wenn beim cin "asd" eingegeben wird, kann ich dann etwas eingeben, dass mir den Platz für die anderen 2 Buchstaben (s,d) unabhängig vom Buchstaben freihält
    (In diesem Fall als "X" angegeben)
    

    if(text.substr(text.length()-2)=="aXX")
    {...}
    


  • Ihr beide könntet euch auch mal for_each und unary_function anschauen...

    Dann könnte das ganze so aussehen...

    MSVC6 schrieb:

    #include <iostream>
    #include <string>
    #include <algorithm>
    #include <functional>
    
    using namespace std;
    
    template<class TYPE, bool decr>
    struct change_value : public unary_function<TYPE, void> 
    {
       void operator() (const TYPE& x) 
       {
    		if(decr)
    			 if(x % 2 == 0)
    				 const_cast<TYPE&>(x) = const_cast<TYPE&>(x) + 2;
    			 else
    				 const_cast<TYPE&>(x) = const_cast<TYPE&>(x) - 2;
    		else
    			 if(x % 2 == 0)
    				 const_cast<TYPE&>(x) = const_cast<TYPE&>(x) - 2;
    			 else
    				 const_cast<TYPE&>(x) = const_cast<TYPE&>(x) + 2;
       }
    };  
    
    int main()
    {
    	string eingabe;
    	cin >> eingabe;
    
    	for_each(eingabe.c_str(), eingabe.c_str() + eingabe.length(), change_value<char, true>());
    	cout << eingabe << endl;
    	
    	for_each(eingabe.c_str(), eingabe.c_str() + eingabe.length(), change_value<char, false>());
    	cout << eingabe << endl;
    
    	return 0;
    
    }
    

    Gruß
    zeigerzeiger



  • habe das Problem behoben, danke trotzdem! War garnicht so schwer. Also heißt es nun: THREAD CLOSED!

    LPP1991


Anmelden zum Antworten