2016-03-19 4 views
-3

Also, ich wollte ein einfaches Programm erstellen, aber da meine C++ Lektionen 2 Jahre vergangen sind und ich nicht klar erinnere mich an einige Dinge. Das Programm dient zum schnellen Umschalten der Dampfkonten. Ich mache es nur für mich und meine Freunde (wir haben viele accs) und nur für das Training. Es muss eine unbekannte Menge von Steam-Accounts aus der Datei analysieren (Syntax - login = xxxx, pass = yyyy) und sie vars zuweisen. Wie kann ich vars für jeden Login und Passwort erstellen?Parsing unbekannte Menge von Zeilen und Zuweisen von Vars

habe ich wie diese

string line; 
ifstream accfile("steamaccountswitcher"); 

if (!accfile) 
{ 
    ofstream newaccfile("steamaccountswitcher"); //Create a new file, if doesnt exist 
    newaccfile.close(); 
} 

int lcounter = 1, pos = 0; 
map<string, int> login, pass; 

while (getline(accfile, line)) //Getting lines 
{ 
    pos = line.find(","); //Locating sparator 

    for (int i = 0; i < pos; i++) //Setting login var 
    { 
     login["lcounter"] += line[i]; 
    } 

    for (int i = pos; i < sizeof(line); i++) //Setting pass var 
    { 
     pass["lcounter"] += line[i]; 
    } 

    lcounter++; 
} 

versucht, aber es war nicht zu arbeiten. Vielleicht ist da ein wirklich dummer Fehler, aber ich sehe es nicht. jetzt nur ich brauche var Login "login = xxxxx" und übergeben var sein - "pass = yyyyy"

Beispiel steamaccountswitcher Datei:

login=1234,pass=4567 
login=1111,pass=2222 
login=2222,pass=2222 

Vielen Dank für Ihre Hilfe.

+1

"Es funktioniert nicht" ist keine nützliche Beschreibung eines Problems. –

+0

Warum nicht 'std :: vector' verwenden? – MikeCAT

Antwort

1
  • pos ist die Position des ,, so müssen Sie mit pos + 1 beginnen pass=yyyyy zu bekommen, nicht ,pass=yyyyy.
  • sizeof(line) ist kein guter Weg, um die Länge der Zeichenfolge zu erhalten. Sie sollten für diesen Zweck verwenden.
  • Mit std::string::substr() ist in diesem Fall besser.
  • "lcounter" nicht zu lcounter unterscheiden und Ihr Programm wird Daten von allen Linien in einer Daten verketten.
  • int kann keine Strings halten.
  • Sie sollten den richtigen Typ für pos verwenden, der den Rückgabewert std::string::find() speichert.

Try this:

int lcounter = 1; 
string::size_type pos = 0; 
map<int, string> login, pass; 

while (getline(accfile, line)) //Getting lines 
{ 
    pos = line.find(","); //Locating sparator 
    if (pos == string::npos) continue; // For safety 

    login[lcounter] = line.substr(0, pos); //Setting login var 

    pass[lcounter] = line.substr(pos + 1); //Setting pass var 

    lcounter++; 
} 
Verwandte Themen