Problem mit string-Vergleich
-
[EDIT]Übereilig frage Falsch verstanden :p [/EDIT]
-
Probe-Nutzer schrieb:
Hallo,
Optimizer schrieb:
Du kannst keinen Buffer mit ner konstanten Zeichenfolge oder einem anderen Buffer vergleichen. Dabei vergleichst du nur die Adressen und das Ergebnis ist Implementierungsabhängig.
Es werden hier korrekt Zeichenfolgen verglichen, keine Zeiger.
@5(0rP :
du mußt bedenken, daß fgets auch das '\n'-Zeichen einliest, das du in deinem Vergleichsstring sicher nicht hast.
MfG
Ich hab ihm ja gesagt, er soll std::string und == verwenden. Wie er das gemacht hat, hat er nicht gepostet, deshalb hab ich mal vermutet, er hat sowas wie buffer == "uoisgdf" ausprobiert, weil er immer false kriegt.
-
Ja, ich habe die ausgelesene Zeile in den Buffer kopiert und dann mit == verglichen. Das ging nicht. (mit std::string)
-
Hallo,
bitte poste doch einfach mal deinen Code. Irgendwie hört sich das alles zu kompliziert an.....
-
Hallo,
da wir uns im Standard-C++ befinden, poste ich einfach mal eine Möglichkeit, wie man sie mit der Sprache eher implementieren würde:
#include <iostream> #include <string> #include <fstream> using namespace std; int main() { ifstream file("datei.txt"); string line; while(!file.eof()) { getline(file, line); if(line == "string") [...] } return 0; }
Sollte klappen.
PS: Was für ein Rückgabewert ist das bei getline? Ich las oft, basic_istream, doch nichts Genaueres, worum handelt es sich in diesem Fall dabei? Ist das einfach das, was man als 1. Parameter übergeben hat?
-
Der erste Parameter ist der Stream aus dem es liest,
könnte also auch cin sein während der zweite Parameter
die Variable ist in der der Inhalt gespeichert wird.
-
Mis2com schrieb:
PS: Was für ein Rückgabewert ist das bei getline? Ich las oft, basic_istream, doch nichts Genaueres, worum handelt es sich in diesem Fall dabei? Ist das einfach das, was man als 1. Parameter übergeben hat?
Jo,
damit kann man
for(string line; getline(stream, line); )
{
bla();
}
machen
-
Ja genau, ich wollte das getline auch erst als while-Argument angeben...
Aber wenn es der erste Parameter ist, ist das doch nie 0, auch wenn der Stream zu Ende ist, oder?
-
Mis2com schrieb:
Aber wenn es der erste Parameter ist, ist das doch nie 0, auch wenn der Stream zu Ende ist, oder?
statt if(!file.is_open())
kannst du ja auch if(!file) schreiben.wenn du file also als bool ausdruck behandelst, returnt es die status - und der ist immer true, es sei denn ein fehler ist aufgetreten (fail bit gesetzt), dann ist es false.
-
ahso, ich verstehe, eof ist ein fail bit?