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...
-
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.