Probleme beim Umgang mit Strings



  • Hey,

    ich möchte mir für die alltägliche Arbeit im Labor ein kleines Programm schreiben und nebenbei die Sprache C++ lernen. Dieses Programm soll eine Gensequenz (string mit mehreren tausen Zeichen aus AGTC) einlesen und anschließend die jeweils drei nächsten Zeichen in ein Temporären String kopieren. Dieser String soll anschließend mit einem mehrdimensionalen String verglichen werden, in dem die Codierungen für die jeweiligen Aminosäuren gespeichert sind.

    Wenn ich jedoch mit einer for-schleife die jeweils drei nächsten Zeichen in einen Char mit drei Plätzen einlese, werden diesem auch komische Sonderzeichen, wie Herzen und Pik-Symbole zugewiesen (zumindest werden sie in der Console ausgegeben). Ich kann dieses Problem zwar umgehen (mit der TMPP-Variable, siehe unten), aber es sollte ja auf jeden Fall einen eleganteren Weg geben. Es interessiert mich außerdem, was diesen Fehler verursacht und ob ich wirklich einen Char mit drei Plätzen nehmen muss, oder ob es einen einfacheren Weg gibt je drei Zeichen aus einem String zu extrahieren. Habt ihr einen Tip für mich, wie ich einzelne Positionen in Strings am besten ansprechen kann?

    for (int LAUFVAR = 0; LAUFVAR < NUKLEOTIDSEQUENZ.length(); LAUFVAR = LAUFVAR + 3) {
    //Weise einem Temorärenstring das Basentriplet zu([Laufvariable], [Laufvariable + 1], [Laufvariable + 3])
    char TMP[3];
    string TMPP;
    for (int j = 0; j <= 2; j++) {
    if (LAUFVAR + j <= NUKLEOTIDSEQUENZ.length()) {
    TMP[j] = NUKLEOTIDSEQUENZ[LAUFVAR + j];
    TMPP = TMPP+TMP[j];
    }
    }
    std::cout << TMP << "\n";

    Vielen Dank schonmal für eure Hilfe! 🙂



  • Diese Sonderzeichen stehen nicht in TMP.

    Das passiert bei der Ausgabe, da diese einen Nullterminierten C-String erwartet.
    Das hast du nicht, also wird solange ausgegebn, bis eine '\0' gefunden wird.



  • Ah, dass sie so enden müssen habe ich bereits gelesen, aber ich hätte nie gedacht dass das den Fehler verursacht. Vielen Dank für die schnelle Antwort 🙂



  • Ah, dass sie so enden müssen habe ich bereits gelesen, aber ich hätte nie gedacht dass das den Fehler verursacht

    so wie:

    Ah, dass man Diesel tanken muss habe ich bereits gelesen, aber ich hätte nie gedacht dass das den Fehler verursacht



  • Gast3 schrieb:

    Ah, dass sie so enden müssen habe ich bereits gelesen, aber ich hätte nie gedacht dass das den Fehler verursacht

    so wie:

    Ah, dass man Diesel tanken muss habe ich bereits gelesen, aber ich hätte nie gedacht dass das den Fehler verursacht

    Diesel Tanken verursacht Fehler? Ich dachte das beschränkt sich auf's Diesel fahren. 🤡


Log in to reply