通过char C ++检查stringstream line char

时间:2017-03-27 16:41:55

标签: c++ algorithm input char stack

我会简短而简单。在确保用户能够成功打开文件之后,我编写了以下代码来从inputFile中获取一行。

string line;
int counter = 0;

DynIntStack stack;

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

    //I NEED TO DO IT HERE
}

这将用于编写程序来检查输入cpp文件中的平衡paranthesis,我必须使用堆栈。从我检查过的主题中我理解经典的CS作业:)

计数器在每一行之后更新,如果行号有一个开括号,则行号(计数器)将被推入堆栈,如果它是一个右括号,它必须从堆栈中弹出。在这些之后,输出应该如下所示:

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

但我不知道如何检查我通过char获取char的行。如果找到开始或结束括号,我需要一个循环来检查字符并应用前面提到的内容。如何通过char检查行char。

  • 禁止使用堆栈以外的任何数据容器。

非常感谢你:)

2 个答案:

答案 0 :(得分:5)

  

但我不知道如何查看我用char获取char的行

这是你想要的吗?

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

答案 1 :(得分:1)

除了Kaidul Islam的正确答案,std::string支持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
        }
    }
}