PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : string curchsuchen



Takt
20-09-2003, 01:18
Also, da mir grad elangweilig ist, habe ich angefangen, das Perioden system in nen nettes kleines Programm einzubauen :D
Naja, ich habe eine datei, chemicals.dat, in welcher die Elemente in folgender Form aufgezählt sind:
H Wasserstoff 1 1,008 1 1a
He Helium 2 4,003 1 2a
Li Lithium 3 6,939 2 1a
Be Beryllium 4 9,012 2 2a
Also Symbol, Name, Ordnungszahl, Atommasse, Periode, Gruppe
So, nun will ich diese Datei nach den Symbolen durchsuchen und die dazugehörigen Daten ausgeben, dazu hatte ich mir folgenden code geschrieben:


{
Chemical chemical;
string suchwort;
cout << "Bitte gib das zu suchende Symbol ein: ";
cin >> suchwort;
int zaehler = 0;
ifstream in ("chemicals.dat");
if(!in)
{
cout << "\nDatei kann nicht geoeffnet werden!" << endl;
return -1;
}
while(!in.eof())
{
in >> chemical.symbol;
in >> chemical.name;
in >> chemical.ordnungszahl;
in >> chemical.masse;
in >> chemical.periode;
in >> chemical.hauptgruppe;
if(chemical.symbol == suchwort)
{
zaehler++;
cout << endl;
cout << "Symbol: " << chemical.symbol << endl;
cout << "Name: " << chemical.name << endl;
cout << "Ordnungszahl: " << chemical.ordnungszahl << endl;
cout << "Masse: " << chemical.masse << " U" << endl;
cout << "Periode: " << chemical.periode << endl;
cout << "Hauptgruppe: " << chemical.hauptgruppe << endl;
cout << "Protonen: " << chemical.ordnungszahl << endl;

cout << "Elektronen: " << chemical.ordnungszahl << endl;
//cout << "Neutronen: " << chemical.masse - (chemical.ordnungszahl*2) << endl;
}
}
cout << endl;
cout << zaehler << " Elemente gefunden." << endl;
in.close();
getchar();
}

Naja, das hat bei meinem Adress verwaltungs progg so auch ganz gut funktioniert, jedoch findet er hier einfach nix :rolleyes:
Ich gabe zb. H ein, und er findet nix. Habe mal nach allen sachen suchen lassen, also die if verändert, da hat er bei Zahlen immer alles richtige gefunden, bei anderens trings jedoch nicht. Hat da jemand ne idee?
Habe gemerkt, dass sowohld as getchar() als auch das letzte cout einfach übersprungen wird. Ich weis echt nimmer weiter.
MfG. Takt

anda_skoa
20-09-2003, 12:05
Gib mal direkt nach dem in >> das gelesene Element aus, zb auf cerr.
Vielleicht wird wo mit einer Exception abgebrochen.

Die Deklaration von Chemicals wäre auch ganz nett gewesen. So muss man raten, welche Typen die einzelenen Elementen haben.

Btw, wenn das eine Textdatei ist
grep "^H" chemicals.dat

Ciao,
_

Berufspenner
20-09-2003, 13:05
Hi@all

Es würde mich auch mal interessieren, wie ich mit C++ Bordmittel Systemunabhängig in einer Datei nach einer bestimmten Sache suchen und dann die ganze Zeile ausgeben lassen kann.

Cu
André

wraith
20-09-2003, 13:26
Original geschrieben von Berufspenner

Es würde mich auch mal interessieren, wie ich mit C++ Bordmittel Systemunabhängig in einer Datei nach einer bestimmten Sache suchen und dann die ganze Zeile ausgeben lassen kann.

Zb. die Datei zeilenweise einlesen (getline),und auf diese Zeile find loslassen,wenn gefunden dann Zeile ausgeben.
Wenn es komplizierter wie ein einfacher string ist,dann vielleicht mit boost::regex versuchen (wäre dann aber nicht mehr C++ Bordmittel).

Takt
20-09-2003, 13:27
die variablen in der klasse sind alle vom typ string.
Exceptions? sagt jetzt bitte nicht, ich soll jetzt noch in meinem buch rumlesen *g*
MfG. Takt
Ps. Hier die declaration:


class Chemical
{
public: // Man kann sich das leben auch schwer machen...
string symbol;
string name;
string ordnungszahl;
string masse;
string periode;
string hauptgruppe;
};

peschmae
20-09-2003, 17:39
wieso alles String?

Irgend ein float/int für die Zahlen währe doch nicht nur speichersparender (hier eher unwichtig) sondern auch sonst praktischer (je nach dem was du dann damit machen willst)

MfG Peschmä

anda_skoa
20-09-2003, 18:04
Wenn er es nur durchsuchen und ausgeben will, ist es so wahrscheinlich praktischer.

Ciao,
_

peschmae
21-09-2003, 08:07
ja, aber wenn er damit noch n bisschen rechnen will...

MfG Peschmä