String sequenziell einlesen





  • Hi Shlo!

    Es handelt sich um ein char*.

    char* soll ja ein String sein, hatte ich oftmals gelesen. Ich wußte nicht, daß man da Unterschiede macht. Also es geht z.Z. definitiv um ein char*.

    Gruß
    Sascha



  • Übrigens: Du musst kein MFC/WinAPI etc. benutzen, um die String-Klasse nutzen zu können. Oder sehe ich das falsch?

    Zumindest ist das viel konfortabler als char*



  • IMHO ist CString ne MFC-Klasse, aber was spricht gegen std::string?

    mfg
    v R



  • Original erstellt von virtuell Realisticer:
    **IMHO ist CString ne MFC-Klasse, aber was spricht gegen std::string?

    mfg
    v R**

    Das meinte ich doch... 😉



  • HI!

    Heißt das, daß keiner weiß, wie es mit char* geht? Das ist Schade!
    Dann formuliere ich meine Frage um:

    1. Kann es mir jemand sonst mit std::string erklären?

    2. Man kann dann wohl ein char* in ein string umwandeln und dann mit dem string arbeiten, oder etwa nicht?!



  • Hi!

    Weiter oben ist bereits ein link in die FAQ. Brauchst nur draufklicken, da findest Du eigentlich die Informationen die Du brauchst.



  • Hi Knuddlbaer, hi Gemeinde!

    Ich habe den Link zur Kenntnis genommen und auch drauf geklickt und es durchgelesen. Aber die Thematik ist meiner Meinung nach eine andere, es geht vorrangig um "Dateibehandlung" etc.

    Ich arbeite nicht mit Dateien. Ich will einfach einen String sequenziell durchgehen:
    Dieser String ist bspw. so aufgebaut:

    <<Beginn>>

    Otto 10
    Bernd 55
    StrPos StrComa #N15
    etc.

    <<Ende>>

    Dieser String wird als ganzes übergeben und ich muß jedes Wort ermitteln und weiterleiten, bearbeiten und wieder zurück in die Schleife springen um das zweite Wort zu ermitteln usw usf.

    Ich hoffe ich habe mein Anliegen nun besser und verständlicher formuliert.

    Gruß
    Sascha



  • Hi!

    Wenn Du Dich ein wenig mit der STL auskennst bzw. es in C++ machen willst kann Dir das vllt. helfen:

    #include "stdafx.h"
    
    #include <string>
    using namespace std;
    #include <list>
    
    std::list<std::string> splitting(std::string tosplitt,const std::string & trennzeichen)
    {
    
        std::string::size_type pos;
        std::list<std::string> temp;
    
        while((pos = tosplitt.find_first_of(trennzeichen)) != std::string::npos)
        {
            std::string toadd(tosplitt.substr(0,pos));
            //trim(toadd);
            if(!toadd.empty())
                temp.push_back(toadd);
    
            tosplitt.erase(0,pos+1);
        }
        if(!tosplitt.empty())
            temp.push_back(tosplitt);
    
        return temp;
    }
    
    int main(int argc,char * argv[])
    {
    
        std::list<std::string> WortListe;
        WortListe = splitting("Hallooo Welt \n Test\n hüstel hmmm ?!. gleicht gibts mecker wegen dem Source :clown:"," \n\r");
    
        int i = 1;
        for(std::list<std::string>::iterator pos = WortListe.begin() ;pos != WortListe.end();++pos,++i)
        {
            cout<<"Wort "<<i<<": "<<pos->c_str()<<'\n';
        }
    
        return 0;
    }
    

    Wenn Dir das nicht hilft schau Dir mal die Funktion strchr an.
    Diese liefert Dir die Adresse zurück von dem Zeichen das gefunden wurde, ansonsten NULL.

    Du könntest so nach den ' ' oder '\n' suchen und die Adressen verwenden um die Worte rauszukopieren oder die Zeichen durch 0 Zeichen zu ersetzen. Jenachdem wie das weiterverarbeiten laufen soll.



  • Rückseite! Wenn Sie sich dort eine kleine Zahl mit dem STL kennen und/oder möchte er den in C ++ Sie antun kann vllt.-Hilfe: * # schließen Sie < glattes > "stdafx.h" # umfassen mit namespace std mit ein; # < Adressen umfassen > std::list<std::string- > splitting(std::string-tosplitt, const std::string und Separatoren) { Position std::string::size_type; std::list<std::string > Temperatur; while((pos = tosplitt.find_first_of (Trennen))! = std::string::npos) { std::string-toadd (tosplitt.substr (0, Position)); trim(toadd); if(!toadd.empty()) temp.push_back (toadd); tosplitt.erase (0, pos+1); } Yew (!tosplitt.empty ()) temp.push_back (tosplitt); * Rückholtemperatur; } internes main(intargc, Behälter * argv[ ]) { std::list<std::string > Liste; huestelhmmm Listen- = splitting("Hallooowelt\nTest\n?!. ähneln Sie mehr meckergibts wegen des source🤡", "des \n\r"); intern I = 1; for(std::liststd::string::iterator Position = WortListe.begin ();pos! = WortListe.end();++pos, ++i) { cout<<"Wort "< < i<<": "< < Position->c_str()<< ' \n '; } Rückkehr 0; } wenn das Ihnen nicht betrachtete zu Ihnen Zeit das Funktionsstrchr hilft. Dieses hält die Rede des Zeichens an Sie, daß von der Rückkehr gefunden wurde, andernfalls NULL. Sie konnten das oder ' \n folglich suchen ' und kopieren, um die Adressen um die Wörter oder die Zeichen durch Zeichen 0 zu verwenden zu ersetzen. Von Jenachdem als dieser Festlichkeit muß zu laufen.



  • std::stringstream t;
        t<<"Hallooo Welt \n Test\n hüstel hmmm ?!. .."," \n\r";
    
        char test[100];
        int i = 1;
        while(!t.fail())
        {   
            memset(test,'\0',100);
            t>>test;
            cout<<"Wort "<<i<<": "<<test<<'\n';
        }
    

    Wäre übrigens auch ne variante.



  • Hallo Michael!

    Vielen vielen Dank für Deine Antwort!
    Ich werde sie mir gleich zu Gemüte ziehen.

    Gruß
    Sascha


Anmelden zum Antworten