aus Textdatei ins Array schreiben



  • Besten Dank für Eure Hilfen.
    Auch ich habe nochmal mein Glück versucht. Der folgende Code trennt mir Person und Antwort, wie gewollt. Dann wollte ich i=1 für eine y-Antwort setzen. Aber da pch ein Zeiger ist, funktioniert dies nicht korrekt. Könnte so ein Vergleich denn so funktionieren? Wie gesagt, ich bin ein Anfänger, der gern immer dazulernen will.

    #include <stdio.h>
    #include <string.h>
    
    int main ()
    {
      char str[] ="democrat,y,n,y,n,y,n";
      char * pch;
      //int i=0;
    
      pch = strtok (str," ,.-");
      while (pch != NULL)
      {
        printf ("%s\n",pch);
        //if (pch=='y')
        	//i=1;
        pch = strtok (NULL, " ,.-");
      }
    
      return 0;
    }
    


  • In deinem Fall nimmst du **pch == 'y'*, damit holst du dir das Zeichen, auf das pch zeigt und vergleichst es mit 'y'. Wenn du eine Zeichenkette vergleichen willst nimmst du strcmp(pch, "y") == 0 , wichtig ist hier y auch als Zeichenkette anzugeben.
    Aber eigentlich willst du mit dem Code ins C-Forum verschoben werden. Wenn wir bei C++ bleiben, dann ist std::string dein Werkzeug. Damit entfällt dann auch die Unterscheidung in Zeichen und Zeichenkette, du hast dann nur noch Texte.



  • c++anf schrieb:

    ... ich bin ein Anfänger, der gern immer dazulernen will.

    das ist gut; nur wenn Du was in C++ dazu lernen möchtest, so solltest Du Dich umgehend von <stdio.h> <string.h> strtok und printf trennen.

    PS.: was macht eigentlich strtok?



  • Werner Salomon schrieb:

    was macht eigentlich strtok?

    Damit werden Strings an Trennzeichen aufgetrennt. In der Man-Page steht aber, man solle lieber strsep() nutzen. Was den negativen Nebeneffekt hat den Ausgangsstring zu bearbeiten und die Trennzeichen mit '\0' ersetzt.



  • Nick Unbekannt schrieb:

    Werner Salomon schrieb:

    was macht eigentlich strtok?

    Damit werden Strings an Trennzeichen aufgetrennt. In der Man-Page steht aber, man solle lieber strsep() nutzen. Was den negativen Nebeneffekt hat den Ausgangsstring zu bearbeiten und die Trennzeichen mit '\0' ersetzt.

    .. Hm!? wenn ich bei www.cplusplus.com nach strsep suche, so kommt ein:

    No results found for 'strsep'

    was will uns das wohl sagen?



  • Werner Salomon schrieb:

    was will uns das wohl sagen?

    Das deine Quelle nicht aktuell ist!

    http://linux.die.net/man/3/strsep


  • Mod

    Nick Unbekannt schrieb:

    Werner Salomon schrieb:

    was will uns das wohl sagen?

    Das deine Quelle nicht aktuell ist!

    http://linux.die.net/man/3/strsep

    Oje. Selfowned kann man da wohl nur sagen. Ich vermute mal, dies war es auch, worauf Werner Salomon hinaus wollte.



  • SeppJ schrieb:

    Nick Unbekannt schrieb:

    Oje. Selfowned kann man da wohl nur sagen. Ich vermute mal, dies war es auch, worauf Werner Salomon hinaus wollte.

    😕

    Die Datei string.h ist auf cplusplus.com sehr wohl vorhanden. Ich weiß jetzt nicht worauf ihr hinaus wollt?


  • Mod

    🙄 strsep ist kein Standard C++. Das ist ein spezieller Befehl der in der C Runtime von POSIX verfügbar ist. Das steht auch klipp und klar auf den selber von dir verlinkten Seiten. Und dann anderen vorzuwerfen, dass ihre Quellen veraltet sind ist schon dreist, wenn man selber falsche Quellen benutzt und es noch nicht einmal merkt.



  • Darauf habe gar nicht geachtet, sonst hätte ich auch nicht gefragt. Man kann aber auch die Leute richtig darauf hinweisen und sich nicht nur feixend in die Ecke stellen, was ich nun wieder dreist finde. Und wenn man schon so korrekt sein möchte, dann steht dort BSD und nicht POSIX.
    Und wenn man sich so umsieht, dann scheint die Funktion bei den meisten vorhanden zu sein. Vielleicht nicht bei MS, aber da ist ja so einiges anders.



  • Hallo Nick Unbekannt,

    Entschuldigung, ich wollte niemandens Unmut erregen. Das war nicht meine Absicht.

    Mich nervt es, dass bei Threads dieser Art immer wieder in die Kerbe 'lese den Text und interpretiere ihn mit String-Funktionen' geschlagen wird.

    Es ist ja völlig ok, dass ein Anfänger fragt wie man die Info aus einer Datei in ein C++-Programm bekommt. Aber es ist traurig, jedes mal diese Ignoranz der dann antwortenden gegenüber den C++-Streams mit anzusehen. Und das von Leuten, denen ich durchaus Erfahrung in der C++-Programmierung unterstelle. Irgendjemand fängt an und schon wird über strtok & Co diskutiert, wo Du völlig korrekt auch noch erwähnst

    Nick Unbekannt schrieb:

    In der Man-Page steht aber, man solle lieber strsep() nutzen.

    .. aus diesen und anderen Gründen ist mal C++ erfunden worden!

    Es ist doch Fakt dass:
    1.) wir hier C++ machen (neuerdings auch C++0x) so steht's in der Überschrift
    2.) die Ein-Ausgabe in C++ über Streams läuft - und zwar ausschließlich über Streams

    istreams können char, int, double, Komma-Zeichen und strings lesen und man kann ihnen auch beibringen, Antworten zu lesen , die aus 'y' oder 'n' bestehen. Also warum das nicht nutzen.

    Jemand der in C++ mit (C-)String-Funktionen versucht, die Eingabe zu interpretieren, ist in meinen Augen wie jemand, der sich zum ersten Mal ein großes Auto kauft, damit in Urlaub fährt und sich sein Gepäck mit der Bahn nachschicken lässt. Nach dem Motto: das hat früher doch auch gut funktioniert - ohne Auto.

    Ich hatte heute nachmittag mal keine Lust, darauf wieder mal hinzuweisen, sondern habe einfach 'blöde Fragen' gestellt. Das Du den Fettnapf gefunden hast, war reiner Zufall 😉

    Gruß
    Werner



  • Das ist genau mein reden, siehe den Post vor deinem. Sich über das Missverständnis zu ärgern, dass ist die Mühe nicht wert. Auch für SeppJ nicht.
    Ich fand deine Frage nur seriös genug, um darauf zu antworten.


Anmelden zum Antworten