Methoden operator<< und operator>>
-
Hi,
kannst du mir das erklären?in >> ']';
-
Die Aufgabenstellung sagt ja, dass die Liste mit einer bestimmten Formatierung ein- und ausgegeben werden soll. Also die Eingabe soll wie die Ausgabe aussehen.
(Gewünschtes Format für die Darstellung einer Liste mit den drei Werten 1, 2 und 3 als Inhalt ist [1,2,3].)
-
Ja, es wäre schön, wenn das so in der Art gehen würde. Aber leider kann man so nicht Zeichen überspringen. Erstelle dir eine temporärere char Variable, lies darin ein und prüfe, ob sie '[' ist.
-
Könntest du mir das vllt ein bisschen genauer erklären. Stehe gerade ein bisschen auf dem Schlauch. Habe eben nochmal probiert es so zu machen: (funktioniert aber auch nicht)
istream& operator>>(istream& in, const Liste& inp) {
int k=x-1; //Anzahl Komma
char q[x+k+2]; //hat Größe: Anzahl Zahlen, Anzahl Komma, zwei Klammern
int i=0;
q[i]='[';
for (int i=1; i<inp.x; i++) {
q[i]=inp.zahl[y];
i++;
if (i != (inp.x-1))
q[i]= ',';
i++;
else
q[i]= ']';
}
return in;
}wie kann ich denn meine Zahlen einlesen?

-
Er meint nur ein einzelnes Zeichen einlesen:
char c; in >> c; if (c != '[') // errorWas du im Fehlerfall machst, ist dir überlassen.
Typischerweise schreibt man da
in.setstate(std::ios_base::failbit); return in;
-
habe den Teil jetzt so geändert:
istream& operator>>(istream& in, const Liste& inp) {
char c;
in >> c;
if (c != '[')
in.setstate(std::ios_base::failbit);
else
do {
in >> c;
} while (c >= 0 || c ==',');
if (c == ']')
return in;
}allerdings funktioniert die ausgabe jetzt nicht mehr.
-
class Liste { public: int x; // tolle int *y; // namen Liste() { x = 0; } ~Liste() { if (y) delete[] y; } // if unnoetig, delete[] 0 hat keine Wirkung. void werte(int zahl) { if (zahl == 0) // den Spezialfall wirklich hier behandeln? return; if (x == 0) { y = new int[x + 1]; // wenn du 1 meinst, dann schreib 1 hin. "new int" taets auch. y[x] = zahl; // *y = zahl x++; } else{ int *iarr = new int[x + 1]; for (int i = 0; i < x; i++){ iarr[i] = y[i]; } iarr[x] = zahl; x++; y = iarr; // der pointer auf den alten Speicherbereich ist jetzt futsch. wer gibt den Speicher frei? } } };
-
xhkjd
-
Verwende bitte [code]-Tags, wenn du code postest.
Du verwendest denistream& operator>>(istream& in, const Liste& inp)nirgends. In dermain()ließt du immer noch in einenintein, nicht in eineListe. Wenn du wie bisher1[enter]2[enter]...0[enter]eingibst läuft dein Programm wie vorher.
Amoperator>>()stimmt noch was nicht. Du ließt immer in einencharnie einenintund du veränderst die Liste darin garnicht.
-
xcvnb