Frage zu bool funktion



  • Hallo, ich möchte eine Funktion schreiben, die einen String darauf testet ob nur Buchstaben A und G drin vorkommen.

    Ich habe es so versucht

    bool test (string str){
       bool a = true;
    
       for (int k=0; k<str.length();++k){
    	if (str[k]!=('A'||'G' ){
    	a = false;
    	break;
    	}
      }
       return a;
    }
    

    Das funktioniert leider so nicht, und ich bekomm ein false obwohl nur As und Gs vorkommen. Also irgendwie verstehe ich diese logischen operatoren nicht so ganz. Wie realisier ich denn ein weder noch?



  • if (str[k]!='A' && str[k]!= 'C' ){
    


  • Mir ist es, wie so oft, erst eingefallen als ich den absendebutton gedrückt habe...

    str[k]!='A' && str[k]!='G')
    


  • if (str[k]!=('A'||'G')
    {
        a = false;
        break;
    }
    

    Wie kann das kompilieren?



  • Mein Gott, nimm doch einfach einen Algorithmus 😮 😮

    bool test (string str)
    {
       return str.find_first_not_of("AG") == std::string::npos;
    }
    

    Edit: Rechtschreibfehler.
    Edit³: Man, ich mach die ganze Zeit Flüchtigkeitsfehler... 🙄


  • Mod

    FreakY<3Cpp schrieb:

    if (str[k]!=('A'||'G')
    {
        a = false;
        break;
    }
    

    Wie kann das kompilieren?

    Das ist zwar nicht sinnvoll, aber gültiges C++. Zuerst wird 'A' mit 'G' logisch verODERt, was true ergibt. true ist in den Zahlenwert 1 konvertierbar. Dieser wird mit str[k] verglichen. Das ist den Compilern die ich kenne nicht einmal eine Warnung wert.



  • SeppJ schrieb:

    FreakY<3Cpp schrieb:

    if (str[k]!=('A'||'G')
    {
        a = false;
        break;
    }
    

    Wie kann das kompilieren?

    Das ist zwar nicht sinnvoll, aber gültiges C++. Zuerst wird 'A' mit 'G' logisch verODERt, was true ergibt. true ist in den Zahlenwert 1 konvertierbar. Dieser wird mit str[k] verglichen. Das ist den Compilern die ich kenne nicht einmal eine Warnung wert.

    Ich meinte eher die Klammersetzung.



  • FreakY<3Cpp schrieb:

    SeppJ schrieb:

    FreakY<3Cpp schrieb:

    if (str[k]!=('A'||'G')
    {
        a = false;
        break;
    }
    

    Wie kann das kompilieren?

    Das ist zwar nicht sinnvoll, aber gültiges C++. Zuerst wird 'A' mit 'G' logisch verODERt, was true ergibt. true ist in den Zahlenwert 1 konvertierbar. Dieser wird mit str[k] verglichen. Das ist den Compilern die ich kenne nicht einmal eine Warnung wert.

    Ich meinte eher die Klammersetzung.

    Aha! Hier haben wir also einen klaren Fall von NICHT KOPIERT! 🤡



  • Sone schrieb:

    FreakY<3Cpp schrieb:

    SeppJ schrieb:

    FreakY<3Cpp schrieb:

    if (str[k]!=('A'||'G')
    {
        a = false;
        break;
    }
    

    Wie kann das kompilieren?

    Das ist zwar nicht sinnvoll, aber gültiges C++. Zuerst wird 'A' mit 'G' logisch verODERt, was true ergibt. true ist in den Zahlenwert 1 konvertierbar. Dieser wird mit str[k] verglichen. Das ist den Compilern die ich kenne nicht einmal eine Warnung wert.

    Ich meinte eher die Klammersetzung.

    Aha! Hier haben wir also einen klaren Fall von NICHT KOPIERT! 🤡

    Ja, damit man weiß was ich meine. Übrigens ist deine Lösung falsch.



  • FreakY<3Cpp schrieb:

    Übrigens ist deine Lösung falsch.

    weil..........
    Edit: Jetzt ohne Spaß, die ist völlig korrekt.



  • Nach 3 mal editieren schon.



  • Namal schrieb:

    die einen String darauf testet ob nur Buchstaben A und G drin vorkommen.

    Sone schrieb:

    FreakY<3Cpp schrieb:

    Übrigens ist deine Lösung falsch.

    weil..........
    Edit: Jetzt ohne Spaß, die ist völlig korrekt.

    Der TE will, dass beide Buchstaben vorkommen sollen.

    bool test(const string& str)
    {
    	return str.find_first_not_of("AG") == std::string::npos;
    }
    
    int main()
    {
    	cout << boolalpha << test("AAAA") << endl; // sollte false sein.
    	cout << boolalpha << test("GGGG") << endl; // sollte false sein.
    	cout << boolalpha << test("AAGG") << endl; // nur das sollte true sein.
    }
    


  • Sone schrieb:

    Mein Gott, nimm doch einfach einen Algorithmus 😮 😮

    Er bastelt sich doch nen Algorithmus. Du rufst einfach nur ne Funktion auf.

    Gugelmoser schrieb:

    Der TE will, dass beide Buchstaben vorkommen sollen.

    Wo steht das?



  • Michael E. schrieb:

    Gugelmoser schrieb:

    Der TE will, dass beide Buchstaben vorkommen sollen.

    Wo steht das?

    quote - String darauf testet ob nur Buchstaben A und G drin vorkommen. - end quote

    Zumindest verstehe ich das unter und . :p



  • Das verstehe ich aber auch anders als du, Gugelmoser. Mit "A und G" bezeichnet er hier eine Menge an zulässigen Zeichen. Und falls ein Zeichen im String vorkommt, welches nicht aus dieser Menge ist, soll false ausgegeben werden, sonst true. So verstehe ich das. Und es sieht mir auch so aus, als ob das mit dem find_first_not_of eine Lösung dafür wär.



  • Bin immer wieder erstaunt welche diskussionen einfache fragen entfachen 🙂

    Also die aufgabe war einen DNA strang darauf zu überprüfen ob nur A T G und C drin vorkommen und dann aufgaben die darauf aufbauen. zB. dass der Strang durch drei teilbar ist usw. Die klammarsetzung war natürlich völliger blödsinn, aber bin ja auch anfänger :p



  • Namal schrieb:

    Bin immer wieder erstaunt welche diskussionen einfache fragen entfachen 🙂

    Ich bin immer wieder erstaunt darüber, wie unpräzise man Fragen stellen kann.

    Namal schrieb:

    Also die aufgabe war einen DNA strang darauf zu überprüfen ob nur A T G und C drin vorkommen

    Ein DNA Strang hat immer nur A T G und C "drin". Du willst wahrscheinlich einen String (Zeichenkette) überprüfen, ob sie einen DNA Strang repräsentiert (rate ich jetzt mal).



  • krümelkacker schrieb:

    Ich bin immer wieder erstaunt darüber, wie unpräzise man Fragen stellen kann.

    Dein nick ist bei dir wohl das programm...



  • In diesem Gewerbe erleichtert das die Kommunikation untereinander und insbesondere die mit dem Computer ungemein, denn
    Computer sind doof.



  • Und ich kapiere nicht, wie man die Frage des OP falsch verstehen kann.

    Das einzige was der OP verbessern kann ist der Threadtitel. Die Frage war sonnenklar.



  • FreakY<3Cpp schrieb:

    Nach 3 mal editieren schon.

    Tut mir Leid, aber dein Beitrag war 5 Minuten nach meinem letzten Edit.
    🙂
    Aber sry, ich muss weniger Editieren.

    @Michael: HMM? Wurde ihm vorgeschrieben, dass er selber einen so banalen Algorithmus programmieren soll?
    Anstatt sich also die Hände schmutzig zu machen, tut er, was alle Programmierer tun: faul sein 😃


Anmelden zum Antworten