Cześć! Mam taką treść zadania: /*Napisz funkcję przyjmującą w parametrze nazwę pliku tekstowego zawierającego ciągi wyrażeń
arytmetycznych. W każdej linijce znajduje się wyrażenie typu:
(a+b)*((c+d)*e)
Twoim zadaniem jest napisanie funkcji, która zwróci wartość true, jeśli wszystkie wyrażenia
w pliku są zbudowane poprawnie, tj. mają poprawnie umieszczone nawiasy. Liczba nawiasów
otwierających musi być zgodna z liczbą nawiasów zamykających, co więcej – nie można zamknąć
nawiasu nieotwartego.
Przykładowo:
System.out.println(czyPoprawneNawiasy(”plik.txt”));
plik.txt:
(a + b)* ((c + d)* e)
(((a)))
((a + b + c + d)))
((a* c)* d)
Zwróci wartość false, bo w trzeciej linijce jest niepoprawne wyrażenie.Jeśli funkcja znajdzie
niepoprawne wyrażenie, ma nie sprawdzać do końca pliku, ale od razu dać wynik.
*/
Jak na razie udało mi się takie coś napisać:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
string nameOfTextFile = "example.txt";
int pos = 0;
int pos2 = 0;
string line;
void file() {
fstream fik;
fik.open(nameOfTextFile , ios::in | ios::out);
if (fik.good() == true)
{
while (getline(fik, line)) {
while (true) {
pos = line.find('(', pos++);
pos2 = line.find(')', pos2++);
if (pos == string::npos)
break;
}
}
}
else {
cout << "Error! I can not open the file. The file probably doesn't exist\n" << endl;
cout << nameOfTextFile << endl;
}
}
int main() {
while (true){
cout << "( - " << pos << endl;
cout << ") - " << pos2 << endl;
cout << "Enter the name of the text file." << endl;
cout << "> ";
cin >> nameOfTextFile;
file();
}
}
Wszystko fajnie, tylko, że zmienne pos i pos2 nie wyświetlają poprawnych wartości, a dokładnie takie coś wyświetlają:
) - -1
( - 1
Gdzie w notatniku znajduję się tylko takie coś:
(())
I nie wiem gdzie leży problem, nawet nie wiem czy dobrze zadanie zrozumiałem. Będę wdzięczny za jakąś podpowiedź!