简体   繁体   中英

Checking stringstream line char by char C++

I will keep it short and simple. After making sure that user is able to open a file succesfully, I have written the following piece of code to take a line from the inputFile.

string line;
int counter = 0;

DynIntStack stack;

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

    //I NEED TO DO IT HERE
}

This will be used to write program to check balanced paranthesis in an input cpp file and I have to use stacks. Classic CS homework as I understand from the topics I have checked :)

counter is updated after every line and the line number(counter) is to be pushed to the stack if it has a opening bracket and it must be popped from the stack if it is a closing bracket. after these, the output should look something like this:

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

But I do not know how to check the line I got char by char. I need a loop to check the chars and apply the previously mentioned things if an opening or closing bracket is found. How can I check the line char by char.

  • using any data container other than stacks is forbidden.

thank you very much :)

But I do not know how to check the line I got char by char

Is this what you want?

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
        }
    }
}

In addition to the correct answer by Kaidul Islam, a std::string support 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
        }
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM