Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Äquivalent zu explode() in C++?

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 ] > 2 <
010
21.06.2009, 20:30 Uhr
0xdeadbeef
Gott
(Operator)


In dem Moment, in dem j == buffer.size() - 1 ist, wird buffer.at(j + 1) natürlich out_of_range schmeißen. Indices laufen von 0 bis size() - 1, du greifst ein Element dahinter auf dem Vektor zu.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
21.06.2009, 20:51 Uhr
Yadgar



High!


Zitat von 0xdeadbeef:
In dem Moment, in dem j == buffer.size() - 1 ist, wird buffer.at(j + 1) natürlich out_of_range schmeißen. Indices laufen von 0 bis size() - 1, du greifst ein Element dahinter auf dem Vektor zu.


Typischer Anfängerfehler... eins ist allerdings merkwürdig: obwohl jede Zeile nur drei Zahlenwerte (und am Ende ein \n) enthält:

0,20,0,
1,45,15,
0.15,0,
usw.

gibt


C++:
      for (short a=0; a<numbers.size(); a++)
        cout << numbers.at(a) << endl;



folgendes aus:

4
0
20
0


4
1
45
15


4
0
15
0

usw.

Dass die 4 am Anfang wohl für die Zahl der Teilstrings abzüglich ihrer selbst steht ist klar - auf die letzte Zeile folgt kein Komma mehr, da wird folglich nur "3" ausgegeben. Anscheinend ist die erste Zahl aber kein Bestandteil des Vektors, denn wenn ich die Schleife mit a=1 beginnen lasse, wird sie ebenfalls ausgegeben, die tatsächlich pro Zeile erste Zahl im ursprünglichen ASCII-File hingegen nicht mehr, also

4
20
0


4
45
0


4
15
0

usw.

Wie kommt dieses Verhalten zustande? Anders gefragt: was ist istringstream in(line)?

Bis bald im Khyberspace!

Yadgar
--
Flagmaker - ein Programmier-Blog
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
21.06.2009, 21:15 Uhr
0xdeadbeef
Gott
(Operator)


Du lässt ja vor der Ausgabe des Vektors auch die Größe des Vektors ausgeben. Es ist wenig verwunderlich, dass sie dann ausgegeben wird.

std::istringstream ist ein Eingabestrom, der einen String als Grundlage hat. Dadurch lässt sich der String wie eine Datei (oder die Konsole) lesen. Ich benutze ihn hier, weil mir mit std::getline bereits eine Funktion zur Verfügung steht, die bis zu einem bestimmten Zeichen aus einem Eingabestrom lesen kann (per default '\n', daher auch der Name getline).
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
21.06.2009, 21:21 Uhr
Yadgar



High!


Zitat von 0xdeadbeef:
Du lässt ja vor der Ausgabe des Vektors auch die Größe des Vektors ausgeben. Es ist wenig verwunderlich, dass sie dann ausgegeben wird.



Oh Mann, ich werde alt... Leute über 30 sollten die Finger von C++ lassen! So wird das jedenfalls nichts mit der tollen Programmiererkarriere...

Bis bald im Khyberspace!

Yadgar
--
Flagmaker - ein Programmier-Blog
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ 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: