Substring in Schleife



  • Hallo Leutz, hab ein Problem...
    ich will, dass ein String, dessen Länge unbekannt ist, in 3er Substrings eingeteilt wird und diese dann erneut einzeln überprüft werden. Ungefähr so:

    string test;
    for(int i=0;i<test.length();i=i+3) {
    //hier sollen die einzelnen strings definiert werden, 
    z.b. mit tri"i"(damit anstelle von "i" eine zahl steht)//
    =test.substr(i,3); }
    

    danke, euer Dieder



  • Variablennamen kannst du nicht zur Laufzeit zusammensetzen (schon weil die Variablen zur Laufzeit keinen Namen mehr haben). Aber du kannst mehrere gleichartige Werte in ein Array oder vector packen:

    string test;
    vector<string> tri;
    for(int i=0;i<test.length();i=i+3)
    {
      tri.push_back(test.substr(i,3));
    }
    


  • Hey, danke für die schnelle Antwort aber mir ist nicht ganz klar, wie ich diese einzelnen Abschnitte überprüfen könnte? Sagen wir:

    for(int i = 0;i < amino.length();i=i+3)
       {
               if (tri.substr(i,3) == "ABC") {
                   tri.substr(i,3) = "Alphabet";}
               if (tri.substr(i,3) == "DEF") {
                   tri.substr(i,3) = "andere Buchstaben";}
               //usw
    
       }
    

    danke im voraus, Dieder



  • In "tri" stehen die einzelnen Teile in einer Array-ähnlichen Struktur drin, d.h. du kannst sie über ihren Index ansprechen:

    for(i=0;i<tri.size();++i)
    {
      if(tri[i] == "ABC")
        tri[i] = "Alphabet";
      else if(tri[i] == "DEF")
        tri[i] = "andere Buchstaben";
      ...
    }
    


  • Hab es jetzt so geschrieben:

    vector<string> tri; 
    
        for(int i=0;i<test.length();i=i+3) 
       { 
          tri.push_back(test.substr(i,3)); 
       }
    
       for(int i = 0;i < test.length();++i)
       {
               if (tri[i] == "ABC") 
               {
                   tri[i] = "Alphabet";
               }
    
       }
    
       for(int i = 0;i < test.length();++i)
       {
               cout << tri[i];
       }
    

    Beim Ausführen wenn ich ABC eingebe kommt allerdings ein Fehler...Programm hat einen Fehler festgestellt, bericht senden nicht senden .... der Compiler hat es kompiliert.



  • Du mußt schon die richtige Längenangabe nehmen für deine Schleife - du hast je drei Zeichen von "test" zu einem Element von "tri" zusammengefasst, also ist tri auch ein ganzes Stück kürzer (und Zugriffe jenseits des erlaubten Bereiches quittiert das System mit derartigen Fehlermeldungen).



  • Hey danke, hat alles geklappt, jetzt nur noch ein letztes Problem:

    Wie überprüfe ich, ob andere Buchstaben ausser ATGC eingegeben wurden? Danke für die Hilfe,

    Dieder



  • Hallo Polyeder,

    Dieder schrieb:

    Wie überprüfe ich, ob andere Buchstaben ausser ATGC eingegeben wurden?

    Kurze Antwort: 'find_first_not_of'.

    Lange Antwort:

    string DNA = "ACTGTAGAGCX";
    
    bool contains_invalid_char = DNA.find_first_not_of("ACGT") != string::npos;
    

Log in to reply