Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » ws(eat white spaces)-string mit leerzeichnen lesen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
05.01.2008, 02:30 Uhr
~beterman14
Gast


ich grüsse alle..
es ist folgendes..
ich möchte aus ein .txt datei was lesen
ein beispiel zeile aus .txt datei sieht so aus...

britney spears am bahnhof 33 555343563

und mein funktion ist:


C++:
void Person::fromStream(istream & is) //memberfunktion
{
string _vorname,_nachname,_adress,_phonenumber;

is>>_vorname;
is>>_nachname;
..... //hier muss erganzt werden
..... //und "am bahnhof 33" muss in string _adress geschrieben werden
is>>_phonenumber;

setnachname(_nachname);
setvorname(_vorname);
setadress(_adress);
setphonenumber(_phonenumber);
}



soweit ich weiss,kann ich dies aufgabe mit ws(eat white spaces)erleidigen.aber ich hab wirklich kein ahnung wie verwendet man ws bzw wie funktionert ws?
(ich habe gegoogelt aber nix gefunden...)
wer kann mir helfen?
ich bedanke mich im voraus...

mod edit: BENUTZE CPP TAGS SELBER

Dieser Post wurde am 05.01.2008 um 13:07 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
05.01.2008, 16:11 Uhr
0xdeadbeef
Gott
(Operator)


Naja, in irgendeiner Weise wirst du schon definieren müssen, was zusammengehört. Allein das Ignorieren der Leerzeichen wird dir nicht helfen, dann wird nämlich auch noch die Telefonnummer am Ende mit eingelesen, und eine konstante Anzahl Terme hast du ja in der Adresse auch nicht. Mit anderen Worten, das Format, das du da benutzt, kann das, was du willst, garnicht leisten. Sinnvoll wäre u.U., stattdessen z.B. CSV zu benutzen, dann sähe deine Zeile aus wie folgt:

Code:
britney,spears,am bahnhof 33,555343563


Oder, wenn die Terme Kommata enthalten können, halt ein anderes Trennzeichen, das nicht benutzt wird. Semikolon zum Beispiel. Jedenfalls kannst du dann den Kram mit std::getline locker da rauslesen, also

C++:
#include <istream>
#include <string>

std::istream &operator>>(std::istream &in, Person &p) {
  std::string vorname, nachname, adresse, telnr;

  std::getline(is, vorname, ',');
  std::getline(is, nachname, ',');
  std::getline(is, adresse, ',');
  std::getline(is, telnr, ',');

  p.setnachname(nachname);
  p.setvorname(vorname);
  p.setadress(adresse);
  p.setphonenumber(telnr);
}

...

Person p;
std::cin >> p;


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 05.01.2008 um 16:12 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
07.01.2008, 20:19 Uhr
~beterman14
Gast


danke erst für dein mühe 0xdeadbeef
was ich oben beschrieben habe,war ein klausur aufgabe...
Die Datensätze haben oben gezeigte Format. Ein Tab ('\t') ist das Trennzeichen für die Datenfelder. Am Zeilenende steht ein End-Of-Line-Zeichen ('\n').

britney spears am bahnhof 33 555343563

und wir müssen ws manipulator ws verwenden,der führende Trennzeichen zu entfernen.
was würdest du mir empfehlen?
wie kann ich ws manipulator hier verwenden?
danke...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
07.01.2008, 20:26 Uhr
0xdeadbeef
Gott
(Operator)


Dokumentation zu std::ws hier: http://cplusplus.com/reference/iostream/manipulators/ws.html
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: