2017-03-27 18 views
1

Ich werde es kurz und einfach halten. Nachdem ich sichergestellt habe, dass der Benutzer eine Datei erfolgreich öffnen kann, habe ich den folgenden Code geschrieben, um eine Zeile aus der Eingabedatei zu nehmen.Überprüfung Zeichenfolge Zeichenkette durch Char C++

string line; 
int counter = 0; 

DynIntStack stack; 

while (!inputFile.eof()) 
{ 
    getline(inputFile, line); 
    stringstream inputLine(line); 
    counter++; 

    //I NEED TO DO IT HERE 
} 

Dies wird verwendet, um Programm zu schreiben, ausgeglichen geklam- mert in einer Eingabe CPP-Datei zu überprüfen, und ich habe Stapel zu verwenden. Klassische CS-Hausaufgaben, wie ich aus den Themen verstehe, die ich überprüft habe :)

Zähler wird nach jeder Zeile aktualisiert und die Zeilennummer (Zähler) soll auf den Stapel geschoben werden, wenn es eine öffnende Klammer hat und aus dem heraus gepoppt werden muss der Stapel, wenn es eine schließende Klammer ist. nachdem diese, sollte die Ausgabe wie folgt aussehen:

block: 3 - 3 
block: 12 - 14 
block: 10 - 14 
block: 5 - 16 
Syntax error in line 21. 

Aber ich weiß nicht, wie die Linie überprüfen ich von char char bekam. Ich brauche eine Schleife, um die Zeichen zu überprüfen und die oben erwähnten Dinge anzuwenden, wenn eine öffnende oder schließende Klammer gefunden wird. Wie kann ich die Zeile Char von Char überprüfen?

  • mit einem anderen Datencontainer als Stacks ist verboten.

vielen Dank :)

+0

Geben Sie einige Zeilen Ihrer Datei –

+0

@KaidulIslam kann es jede CPP-Datei sein. du denkst an die einfachen wie das beinhaltet int main und einige funktionen. – byetisener

Antwort

5

Aber ich weiß nicht, wie die Linie überprüfen ich char char bekam

Ist das, was Sie wollen?

string line; 
int counter = 0; 

DynIntStack stack; 

while (getline(inputFile, line)) 
{ 
    counter++; 

    for(size_t i = 0; i < line.length(); i++) { 
     // line[i] is i'th character 
     if(line[i] == '(') { 
      // do stuff 
     } 
     else if(line[i] == ')') { 
      // do stuff 
     } 
    } 
} 
+0

yeap, danke :) – byetisener

+2

beachten Sie, dass die erste Überprüfung auf eof und dann das Lesen von Daten ist der falsche Weg zu tun. Lesen Sie zuerst die Daten und überprüfen Sie dann, ob der Lesevorgang fehlgeschlagen ist. –

+1

Ja, ich denke 'while (getline (inputFile, line)) {/ * * /}' sollte in Ordnung sein –

1

Neben der richtigen Antwort von Kaidul Islam, eine std::string Unterstützung range based for loops.

string line; 
int counter = 0; 

DynIntStack stack; 

while (getline(inputFile, line)) 
{ 
    ++counter; 

    for (char const c : line) 
    { 
     if (c == '(') 
     { 
      // do stuff 
     } 
     else if (c == ')') 
     { 
      // do stuff 
     } 
    } 
} 
Verwandte Themen