Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

spacegaier

Alter Hase

  • »spacegaier« ist der Autor dieses Themas

Beiträge: 572

Beruf: Student

  • Private Nachricht senden

1

28.11.2006, 16:46

Zeichen aus Datei ohne überflüssige Leerzeichen / Nullen

Hallo zusammen,

ich habe folgendes Problem: Ich aheb eine Datei, in der ich eine Map als Folge von einesn und nullen speichern möchte, z.B. so

01
10

Nun möchte ich dieses Zeichen für Zeichen auslesen, ohne das die Zeilenumbrüche mitgenommen werden.

Ich habe bislang folgenden Code:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <fstream>

using namespace std;

int main()
{
    fstream f;
    char cstring;
    f.open("game.txt", ios::in);
    while (!f.eof())
    {
        f.get(cstring);
        cout << cstring << endl;
    }
    f.close();

    cin.ignore();

    return (0);
}


Ausgabe:

1
0

1
0
0

Er macht also da, wo der Zeilenumbruch ist ein Leerzeichzen rein und am Ende noch mal eine Null, die ich mir auch nicht erklären kann :( .

Ich habe mir auch überlegt, den ganzen Inhalt in eine String zu laedn und diesn dann zu analysieren, fstream will ja char und ich krieg das deshalb auch nicht hin :( .

mfg - spacegaier

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

28.11.2006, 17:17

du könntest auch einfach nur die zeichen 1 und 0 nehmen und alle andren ignorieren!?

Das Gurke

Community-Fossil

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

3

28.11.2006, 18:41

Oder jedes "\n" (bzw die passende Sequenz für einen Umbruch, kp was die STL da liefert) aus dem String nehmen.

Die STL Strings haben eine Menge toller Methoden und auch Iteratoren können was wunderbares sein, vllt mal kundig machen ;)

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

4

28.11.2006, 19:43

Du könntest auch einfach mit den Shift-operatoren arbeiten - da lässt du Leerzeichen und Zeilenumbrüche immer raus, solange du nichts anderes einstellst.

C-/C++-Quelltext

1
2
3
4
5
6
string str;
while (! f.eof())
{
f >> str;
cout << str;
}


sollte eigentlich ungefähr sein, was du meinst.

spacegaier

Alter Hase

  • »spacegaier« ist der Autor dieses Themas

Beiträge: 572

Beruf: Student

  • Private Nachricht senden

5

28.11.2006, 20:16

@dot:
Wie kann ich Zeichen rausfiltern?

@grek40:
Deine Variante nimmt aber immer gleich eine ganze Zeile und das will ich ja eben nicht!

@DasGurke:
Ja aber wie bekomme ich das ganze in einen String?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

28.11.2006, 20:26

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <fstream>

using namespace std;

int main()
{
    fstream f;
    char cstring;
    f.open("game.txt", ios::in);
    while (!f.eof())
    {
        f.get(cstring);

        if(cstring=='0' || cstring=='1')  //!?

           cout << cstring;
    }
    f.close();

    cin.ignore();

    return (0);
}

spacegaier

Alter Hase

  • »spacegaier« ist der Autor dieses Themas

Beiträge: 572

Beruf: Student

  • Private Nachricht senden

7

28.11.2006, 20:30

Okay, danke (hätte ich auch selber drauf kommen können :oops: dachte es gibt da einen extra Befehl).

ABER: Er hängt am Ende immer noch eine Null dran! Warum? (Ist in meinem Fall egal, da ich sie einfach ignorieren kann, aber ich wüsste schon gerne warum?)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

28.11.2006, 20:43

wenn er bei *exakt* obigem code eine '0' dranhängt, dann kann das ja wohl nur daran liegen, dass da noch eine '0' steht!?

Das Gurke

Community-Fossil

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

9

28.11.2006, 20:44

Die meisten Strings sind "null terminated". Weiss garnicht ob alle xD Hatte afaik noch keinen der es nicht war.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

28.11.2006, 20:45

schonmal std::string probiert?
und nullterminiert bedeutet nicht, dass am ende '0' steht ;)

Werbeanzeige