Substring von QString



  • Hallo,

    ich möchte gern mit Qt (QString) Substrings von einem String machen.

    z.B. nach jedem dritten Zeichen den String abschneiden, und ihn als neue Zeile abspeichern. Wie es hier unten dargestellt ist. Wie macht man sowas mit Qt?

    for ( unsigned int start=0; start<line.length(); start+=3)
        {
          string subString;
          subString = line2.substr(start,3);
          cout << subString <<endl;
        }
    

    Danke voraus

    Gruß


  • Mod

    Müsstest du mal in die Doku schauen, ich denke QString hat auch eine SubString Methode, evtl. auch eine Left, Right und Mid Methode, wie es CString in der MFC hat.



  • phlox81 schrieb:

    Müsstest du mal in die Doku schauen, ich denke QString hat auch eine SubString Methode, evtl. auch eine Left, Right und Mid Methode, wie es CString in der MFC hat.

    Danke für den Hinweis. Ich habe die Doku gelesen, und erreiche immer noch nicht das, was ich haben will. Vielleicht hat es mit den Methoden von QString nicht zu tun, sondern eher mit meiner Denkweise.

    Also, ich will einen langen String (eine Bitfolge) lesen, und nach z.B. jedem dritten Zeichen, den gelesenen Teil als neue Zeile abspeichern.

    So sieht mein String aus: 000110101010101000000011010101001000

    Ich will das mit Qt erreichen:
    000
    110
    101
    010
    etc...

    Wie mache ich sowas?

    Ich dachte, es könnte so anfangen:

    for( unsigned int start = 1; start < zeile.length(); start+=2)
    {
      QString substring = zeile.left(3)// Das ist der entscheidende Teil, glaube ich
      fprintf(stdout, (const char*)substring);
    }
    

    Ich brauche echt Euere Hilfe, und bin für jeden Tipp dankbar.

    Gruß


  • Mod

    Also das würde ich viel einfacher machen:

    QString str="010101001110101011010101010001";
    QString bin;
    for(int i = 0, s = str.size(); i < s; i++)
    {
      if(i % 3 == 0)
        bin += '\n';
      bin += str[i];
    }
    

    Kannst du mal den Link zur QString doku posten?



  • phlox81 schrieb:

    Kannst du mal den Link zur QString doku posten?

    Hier ist die Adresse von trolltech. http://doc.trolltech.com/3.3/

    Du kannst zu API Reference --> All Classes gehen, wenn du die Klasse Qstring sehen möchte.

    Kannst Du mir bitte bitte dabei helfen, die Aufgabe mit QString zu lösen?

    Was du gepostet hast, funktioniert zwar, aber ich hätte es gerne mit QString.

    Danke

    Gruß


  • Mod

    Dann müsstest du nur den String um 3 jeweils danach kürzen:

    for( unsigned int start = 1; start < zeile.length(); start+=2)
    {
      QString substring = zeile.left(3)// Das ist der entscheidende Teil, glaube ich
      zeile = zeile.right(3);
      fprintf(stdout, (const char*)substring);
    }
    


  • phlox81 schrieb:

    Dann müsstest du nur den String um 3 jeweils danach kürzen:

    for( unsigned int start = 1; start < zeile.length(); start+=2)
    {
      QString substring = zeile.left(3)// Das ist der entscheidende Teil, glaube ich
      zeile = zeile.right(3);
      fprintf(stdout, (const char*)substring);
    }
    

    Hattest Du selber vorher probiert, denn es funktioniert leider nicht bei mir?



  • Eigentlich sollte diese Aufgabe für jeden lösbar sein, der die Dokumentation hat? Wie sieht denn deine bisherige Lösung aus?

    Ansonsten würde ich in folgende Richtung denken:

    for ( unsigned int start=0; start<line.length(); start+=3)
        {
          QString subString = line.mid(start, 3);
          cout << subString <<endl;
        }
    

  • Mod

    kalissow schrieb:

    phlox81 schrieb:

    Dann müsstest du nur den String um 3 jeweils danach kürzen:

    for( unsigned int start = 1; start < zeile.length(); start+=2)
    {
      QString substring = zeile.left(3)// Das ist der entscheidende Teil, glaube ich
      zeile = zeile.right(3);
      fprintf(stdout, (const char*)substring);
    }
    

    Hattest Du selber vorher probiert, denn es funktioniert leider nicht bei mir?

    Nein, habe ich nicht, ich bin auch nicht für deine Hausaufgaben zuständig, und "funktioniert nicht" ist keine Fehlerbeschreibung.
    Mit hilfe der Dokumentation sollte dies jederselber lösen können, da muss ich ponto zustimmen.

    phlox



  • Ich glaube, es ist wircklich nicht schwer dieses Problem zu verstehen.

    Mit hilfe der Dokumentation sollte dies jederselber lösen können, da muss ich ponto zustimmen.

    Wenn es jedem so gehen würde, müsste dann keine Foren existieren. Warum sind wir alle da? Ich hab beschrieben, was ich machen will und wie ich es gemacht habe. Und wenn es trotzdem nicht funktioniert, muss ich natürlich ins Forum.
    Ihr konnt euer Forum zu machen. Ihr seid keine Hilfe.



  • Ich glaube, es ist wircklich nicht schwer dieses Problem zu verstehen.

    Mit hilfe der Dokumentation sollte dies jederselber lösen können, da muss ich ponto zustimmen.

    Wenn es jedem so gehen würde, müsste dann keine Foren existieren. Warum sind wir alle da? Ich hab beschrieben, was ich machen will und wie ich es gemacht habe. Und wenn es trotzdem nicht funktioniert, muss ich natürlich ins Forum.
    Ihr konnt euer Forum zu machen. Ihr seid keine Hilfe.

    Du hast aber auch nicht die genauen Probleme beschrieben. Dazu gehört immer die Compilermeldung. Oder die Beschreibung des erwarteten und tatsächlichen Verhaltens.

    Es ist übrigends nicht so einfach QStrings auszugeben. Eine Methode ist:

    std::cout << substring.latin1() << std::endl;
    


  • Ponto schrieb:

    Ich glaube, es ist wircklich nicht schwer dieses Problem zu verstehen.

    Mit hilfe der Dokumentation sollte dies jederselber lösen können, da muss ich ponto zustimmen.

    Wenn es jedem so gehen würde, müsste dann keine Foren existieren. Warum sind wir alle da? Ich hab beschrieben, was ich machen will und wie ich es gemacht habe. Und wenn es trotzdem nicht funktioniert, muss ich natürlich ins Forum.
    Ihr konnt euer Forum zu machen. Ihr seid keine Hilfe.

    Du hast aber auch nicht die genauen Probleme beschrieben. Dazu gehört immer die Compilermeldung. Oder die Beschreibung des erwarteten und tatsächlichen Verhaltens.

    Es ist übrigends nicht so einfach QStrings auszugeben. Eine Methode ist:

    std::cout << substring.latin1() << std::endl;
    

    Ich moechte NUR mit Qstring arbeiten. Wegen bestimmten Gründen.
    Genau deswegen bin ich hier.

    Was ich haben will:
    Ich möchte gern einen langen string abschneiden.
    Beispiel:
    Qstring bitfolge = "0100010100010010001001010000000000";
    Nach dem Aufuf des Programms soll folgendes angezeigt werden:
    010
    001
    010
    ...

    Ich weiss, dass es Methode wie left(), right(), mid() ect.. gibt. Aber ich hab nicht geschafft die in einer Schleife so zu schreiben, um das zu bekommen was ich haben möchte.
    Es gibt keine Compilerfehler. Es ist nur ein Bug. d.h. Die Ausgabe ist nicht das was ich haben möchte.

    Ich hatte ganz am Anfang diesen Code geschrieben, und auch gepostet in der Hoffnung, jemand könnte mir helfen.

    for( unsigned int start = 1; start < zeile.length(); start+=2)
    {
      QString substring = zeile.left(3)// Das ist der entscheidende Teil, glaube ich
      zeile = zeile.right(3);
      fprintf(stdout, (const char*)substring);
    }
    

    Aber ich kriege noch mehr Stress von euch. Also, wenn ihr wisst wie das geht, sag mir bitte, wie ich meinen String richtig zerlegen kann.

    Danke

    Gruß


  • Mod

    Ich glaube, es ist wircklich nicht schwer dieses Problem zu verstehen.

    Mit hilfe der Dokumentation sollte dies jederselber lösen können, da muss ich ponto zustimmen.

    Wenn es jedem so gehen würde, müsste dann keine Foren existieren. Warum sind wir alle da? Ich hab beschrieben, was ich machen will und wie ich es gemacht habe. Und wenn es trotzdem nicht funktioniert, muss ich natürlich ins Forum.
    Ihr konnt euer Forum zu machen. Ihr seid keine Hilfe.

    Ich habe kein QT, also kann ich es nicht selber nachvollziehen, was falsch ist.
    Von dem was du postest, müsste es funktionieren, mehr kann ich da nicht sehen. Es ist auch nicht meine Aufgabe mich für dich in die Dokumentation von QString einzulesen, um dir die Frage zu beantworten (Welche du noch nicht mal gestellt hast...).
    Wenn du also eine Hilfe erwartest, müsstest du erstmal beschreiben wo dein Problem liegt. "Funktioniert nicht" ist da nicht ausreichend.

    phlox


  • Mod

    NoNameXYZ123 schrieb:

    Ich moechte NUR mit Qstring arbeiten. Wegen bestimmten Gründen.
    Genau deswegen bin ich hier.

    Was ich haben will:
    Ich möchte gern einen langen string abschneiden.
    Beispiel:
    Qstring bitfolge = "0100010100010010001001010000000000";
    Nach dem Aufuf des Programms soll folgendes angezeigt werden:
    010
    001
    010
    ...

    Ich weiss, dass es Methode wie left(), right(), mid() ect.. gibt. Aber ich hab nicht geschafft die in einer Schleife so zu schreiben, um das zu bekommen was ich haben möchte.
    Es gibt keine Compilerfehler. Es ist nur ein Bug. d.h. Die Ausgabe ist nicht das was ich haben möchte.

    Ich hatte ganz am Anfang diesen Code geschrieben, und auch gepostet in der Hoffnung, jemand könnte mir helfen.

    for( unsigned int start = 1; start < zeile.length(); start+=2)
    {
      QString substring = zeile.left(3)// Das ist der entscheidende Teil, glaube ich
      zeile = zeile.right(3);
      fprintf(stdout, (const char*)substring);
    }
    

    Aber ich kriege noch mehr Stress von euch. Also, wenn ihr wisst wie das geht, sag mir bitte, wie ich meinen String richtig zerlegen kann.

    Danke

    Gruß

    Ich denke du musst einfach etwas probieren. Diese left, right, und mid Methoden sind gewöhnungsbedürftig, das kenne ich noch von CString.
    Wie es mit dem indexoperator gehen würde, habe ich dir ja bereits gezeigt.
    Ich denke das sich dieses Beispiel mit der Hilfe von mid recht einfach umsetzen ließe, alles was du bräuchtest wäre die aktuelle position + einer Prüfung ob pos+3 noch im Index des Strings liegt.

    for( unsigned int start = 1; start < zeile.length(); start++)
    {
      if(start+1 %3 == 0 && start + 3 < zeile.lenght())
      {
        bitinrows += zeile.mid(start, start+3);
      }
    }
    

    phlox



  • NoNameXYZ123 schrieb:

    Ich moechte NUR mit Qstring arbeiten. Wegen bestimmten Gründen.
    Genau deswegen bin ich hier.

    Inzwischen habe ich eine gesamte Lösung gepostet. Schau dir einfach die beiden Posts an und merge die geschickt.


Log in to reply