string auslesen von bis



  • Hi!

    Ich hab folgendes Problem... Ich brauche einen Code, mit dem man einen String auslesen kann und der dann den Inhalt von einem ganz bestimmten Zeichen bis zu einem anderen Zeichen in einen neuen String lägt... wie kann ich das realisieren oder hat hier schon jemand nen Quellcode parat? Wäre echt nett! Danke



  • std::string oder char[]?

    MfG SideWinder



  • std::string... also sind mehrere... das Programm liest eine datei ein und packt diese je nach wort in ein array namens datei mit 20000 stellen... und nun soll der zum beispiel wenn in 3 Arrays "Hallo du da" steht nicht mehr das stehen sonder er soll es umwandeln in Hallo du da ohne die "... Wie realisiere ich das genau?



  • Naja mit std::string hast du ja kein Problem:

    size_type begin = str.find_first_of('\"');
    size_type end = str.find_last_of('\"');
    size_type len = end - begin;
    str = str.substr(begin,len);
    

    MfG SideWinder



  • Funktioniert kein Stück bei mir... Wie muss ich das anwenden, wenn der Text in einem string namens test sitzt? und der string test beinahltet folgendes:

    string test="hust\"ladida\"gehweg";



  • Poste mal den Quellcode in dem du mein Beispiel angewendet hast. Eigentlich sollte das schon funktionieren 😕

    Ich verschieb dich mal ins Standard-C++-Forum, ist ja kein konsolenspezifisches Problem.

    MfG SideWinder



  • Dieser Thread wurde von Moderator/in SideWinder aus dem Forum DOS und Win32-Konsole in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • wenn du den string,in einzelne char´s zerlegst, kannst du die char nach deinem
    zeichen durchsuchen, und hast die position deines zeichens

    c++ code:

    #include <string>
    #include <iostream>

    using namespace std;
    string wort;
    char buchstabe(2);//char array

    for(int i=0;i<wort.size();i++)//wort.size()ist anzahl der buchstaben
    (
    // buchstabe(i) enthält das i´te zeichen des wortes
    cout<<buchstabe(i)<<endl;//ausgabe des arrays
    )

    die klammersybole stimmen nicht!aufpassen
    aber mit arrays und for schleifen kennst du dich ja aus!

    viel spass



  • Ich hab das mal so ausprobioert:

    size_t begin = Source.find_first_of("int"); 
    size_t end = Source.find_last_of(";");
    size_t length = end - begin;
    variable = Source.substr(begin,length);
    

    Aber scheint nicht zu funktionieren... müssen das chars sein? oder können es auch strings sein?



  • Achne... DFUnktioniert doch! Seh ich gerade... problem ist nur, das er nicht das letzte ";" nehmen soll, sondern das nächste...



  • Source.find(';', begin);
    


  • und wie eht es denn aus wenn ich so einen string habe:
    From: XXXXX@XXXXX.com

    [cpp]
    size_t begin = zeile.find_first_of("From:");
    size_t end = zeile.find_last_of("\n");
    size_t length = end - begin;
    from = zeile.substr(begin,length);
    cout <<"Absender: "<< from << endl;

    er soll mir das den Text nach "From:" bis zum zeilenende ausgeben..er macht es aber nicht...sondern haut das "From:" mit aus
    ..wäre für ne kleine hilfe sehr dankbar 😞



  • du musst:

    find_first_not_of("From: ");
    


  • danke schön!!!..noch eine kurze frage
    hier hab ich so eine zeile
    Date: Thu, 7 Apr 2005 21:21:29 -0700

    Hier mein code:

    size_t begin = zeile.find_first_not_of(",");
    size_t end = zeile.find_last_of("-");
    size_t length = end - begin;
    date = zeile.substr(begin,length);
    cout <<"Datum: "<< date << endl;

    wie sage ihm jetzt aber das er die Uhrezit nicht mit raushauen soll
    ala
    size_t end = zeile.find_last_not_of('int:int:int');



  • naja das ist ja sicher alles ein string!
    Somit kennt er int da nicht, die uhrzeit is auch nur nen string!

    Die soll er also nicht mit anzeigen?
    Wenn der String IMMER so aufgebaut ist, such bis zum ersten Doppelpunkt, und ziehe davon 3 ab!



  • wie suche ich denn nach dem doppelpunkt..weil es ist ja der 2te doppelpunkt und nicht der erste??



  • Vielleicht sollte man sich mal informieren, was find_last_not_of wirklich macht...
    MSDN
    Denn

    find_first_not_of("From: ");
    

    macht unter Umständen nicht das, was es soll.



  • ok habs..thx!!!!!!!!!!!!1



  • Achtung! schrieb:

    Vielleicht sollte man sich mal informieren, was find_last_not_of wirklich macht...
    MSDN
    Denn

    find_first_not_of("From: ");
    

    macht unter Umständen nicht das, was es soll.

    erklärs bitte!

    int main(int argc, char* argv[])
    {
     string test="Date: Thu, 27 Jan 2005 21:03.01-0700";
    
     size_t eras = test.find_first_of(":")+2;   //date: loeschen, fuer suche nach :
     test.erase(0,eras);
    
     size_t end = test.find_first_of(":")-4;     //: suchen, und 4 zeichen zurueckgehen
    
     size_t begin = test.find_first_of(",")+2;     //, suchen, 2 zeichen nach vorn gehen
    
     size_t len = end-begin;
     string test2 = test.substr(begin,len+1);
    
     getch();
            return 0;
    }
    

    wenn string immer gleich aufgebaut ist, hab ich mir das überlegt( Ungetestet, und gibt sicher bessere methoden)



  • hab des jetzt so

    size_t begin = zeile.find_first_not_of(", ");
    size_t end = zeile.find_last_of(":");
    size_t length = end - begin-5;
    date = zeile.substr(begin,length);
    cout <<"Datum: "<< date << endl;

    nur macht er die ausgabe vorne wieder mit
    Date: thu, 7.12.2004

    er soll doch den anfang aber nach dem komma machen....


Anmelden zum Antworten