C++ Strings

Hallo!
Wie kann ich aus einer Datei, wenn ich eine Zeile mit Getline eingelesen habe, die Teile in Einzelvariablen speichern, d. h. wie kann ich nach den Trennkomma in einer Variabel suchen? Geht das auch mit Getline??

Hier mal mein Code:
void main()
{
char test[255],name[20];
clrscr();
ifstream in(„c:\zeilen.txt“);
in.getline(test,255,’\n’);
cout

Einfach mit strchr nach dem Komma suchen:

strchr aus

Durchsucht einen String auf das erste Auftauchen eines angegebenen Zeichens.

Deklaration:

char *strchr(const char *s, int c);

Hinweis:

strchr durchsucht einen String in Richtung vorwärts nach einem angegebenen Zeichen.
_fstrchr ist die far-Version.
Diese Funktionen suchen nach dem ersten Auftauchen des Zeichens c im String s.
Die abschließende 0 wird als Teil des Strings betrachtet. Zum Beispiel liefert strchr(strs, 0) einen Zeiger auf das abschließende 0 -Zeichen des Strings str.

Rückgabewert:

  • Bei fehlerfreier Ausführung wird ein Zeiger auf das erste Auftauchen des Zeichens c im String s geliefert.
  • Im Fehlerfall (wenn c in s nicht vorhanden ist) wird 0 geliefert

Mit strncpy dann den Teil aus dem String herauskopieren, den Du brauchst.

Ciao
Journey

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hier mal mein Code:
void main()
{
char test[255],name[20];
clrscr();
ifstream in(„c:\zeilen.txt“);
in.getline(test,255,’\n’);
coutstrtok die einen String durch successives Aufrufen in einzelne Segmente unterteilt, die durch angegeben Trennzeichen unterteilt sind. Ich wuerde allerdings sscanf vorziehen, damit kannst du bei so eindeutigen Formaten einfach

sscanf(test, „%s,%s,%d“, name, vname, nummer)

machen.

So, dass war jetzt alles noch C-Standard. In C++ muesste es so gehen (dafuer uebernehme ich allerdings keine Garantie *g):

in \>\> name \>\> "," \>\> vname \>\> "," \>\> nummer

Ich hoffe, das is jetzt alles richtig =:wink:

Ciao! Bjoern

Hallo Bjoern!
Mit „strtok“ habe ich es inzwischen auf mal versucht, aber leider liest er dann nur den ersten Teil ein und ich weiß nicht, wie ich dann an die anderen beiden kommen kann.

„Sscanf“ klappt bei mir irgendwie nicht so richtig. Könntest Du mal bitte genauer beschreiben, wie ich den Befehl benutzen kann?

Dein Code zu C++ klappt leider überhaupt nicht.

Gruß

Andrea Geerlings

Danke an alle! Klappt nun!! (OT)

Andrea Geerlings

Hallo Bjoern!
Mit „strtok“ habe ich es inzwischen auf
mal versucht, aber leider liest er dann
nur den ersten Teil ein und ich weiß
nicht, wie ich dann an die anderen beiden
kommen kann.

sscanf(token=strtok(minus, ".,-"), "%d", &(temp\_list[x].number[n]));
while(token=strtok(NULL, ".,-")) {
 sscanf(token, "%d", &(temp\_list[x].number[++n]));
}

„Sscanf“ klappt bei mir irgendwie nicht
so richtig. Könntest Du mal bitte genauer
beschreiben, wie ich den Befehl benutzen
kann?

Oben hast du ja schon ein Beispiel gesehen wie man mit sscanf einen String (da war es token) auslesen kann. (das obere is uebrigens aus einem Programm von mir, also nicht wundern *g) Bei C gab/gibt es den Befehl printf zur Ausgabe und man konnte, anders als bei C++, einfach sagen wie er was formatieren sollte. Also

printf("ein %s, und eine Nummer, z.B. die %d oder die %f!", 'String', zahl, floatzahl);

wobei zahl eine Integervariable, mit dem %d ausgegeben wurde, floatzahl mit dem %f und der String mit %s! Wenn man die Ausgabe jetzt als String vorliegen haette, koennte man durch

sscanf(string,"ein %s, und eine Nummer, z.B. die %d oder die %f!", test, zahl2, floatzahl2);

die einzelnen Segmente wieder auslesen!
Und da C++ ja C kompatibel ist sollte man das auch noch nutzen koennen =:wink:

Dein Code zu C++ klappt leider überhaupt
nicht.

Naja, C++ is auch nicht so mein Ding =:wink: Ich versuch gerade ueber Java zur OOP zu kommen *g

Ciao! Bjoern