Von Datei lesen und ueberpruefen C++ 

Status
Für weitere Antworten geschlossen.

XodoX

Registered +
Registriert
Nov. 2003
Beiträge
1.235
Also.. ich will von einer txt Datei lesen, das dann sortieren, und dann berechnen. In der Datei sind nur Multiplikation und Addierung drin. Also sowas hier:

"2*4+3"
"1+4+5*9"

usw. Es darf auch ein Leerzeichen dazwischen sein.

"2 * 4 + 3"

Der Rest ist nicht erlaubt. Also kein

"3++3"
"3+2*4

( muss in " " sein)

Naja, soweit bin ich erst gekommen...

Code:
#include
#include
#include

using namespace std;


std::ifstream inFile("file1.txt", std::ios::in);
if ( ! inFile.is_open() ){
std::cerr return 1;
}


std::ofstream outFile( "file2.txt", std::ios::app ); 
if ( ! outFile.is_open() ){
std::cerr return 2;
}

while ( inFile.good() ){
std::string line;
getline( inFile, line)


outFile }

static int eval(string line)
{
if(line.length() < 1) ression is 0
return 0;

if(line.find_first_of('+') == string::npos)
{
if(line.find_first_of('*') == string::npos) 
return atoi(line.c_str());

int pos = line.find_first_of('*');
return eval(line.substr(0, pos)) * eval(line.substr(pos+1, line.length())); 
}
int pos = line.find_first_of('+');
return eval(line.substr(0, pos)) + eval(line.substr(pos+1, line.length())); 
}


return 0;
}

Also erst einlesen, dann eine rekursive Funktion die mir das berechnet. Bin mir nicht sicher, ob das mit dem "linie" einfach so geht, aber da das ja hier "outFile Wie ueberpruefe ich jetzt, ob das auch alles im richtigen Format ist und es keine Abweichungen gibt? Hab da keine Ahnung ehrlich gesagt:(
 
Hallo,

meiner Meinung nach ist Dein Code so nicht lauffähig. Um C++-Code usw mal laufen zu lassen rate ich Dir das Microsoft Visual C++ 2010 Express zu installieren(ich habe es für C#) das ist umsonst und reicht zum entwickeln und testen solcher Programme.

Da kannst Du auch debuggen...

Dein Programm würde ich dann als z.B. Konsolen-Applikation anlegen und dann
die Funktionen ergänzen.

Dann kannst Du Deine .txt immer wieder anpassen und schauen, welche Fehlermeldungen... Du bekommst, wenn Dein Inhalt der .txt nicht schlüssig ist, und diese dann abfangen.
 
Ich würde einen Parser für die Rechenoperationen schreiben, dann vermeidest du einerseits das evil eval und andererseits kannst du dir bei jeder Zeile sicher sein, dass sie gültig ist.
 
Mh,

eigentlich wollte ich ja nicht antworten, da das Thema bereits ein halbes Jahr alt ist.

@undeath
Der Parser klingt bissl nach Overkill, obwohl weitaus eleganter.
Das ginge mit RegEx ganz einfach, fuer Ganzzahlen:

Code:
(\d+[\+\-\*\/])+\d+

danach sollte man auch bedenkelos eval() ausfuehren koennen, soferns matcht.

Pseudocode:
Code:
foreach(string line in file)
{
if(Regex.Match("(\\d+[\\+\\-\\*\\/])+\\d+", line))
eval(line);
}
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben Unten