2

我正在从文本文件中读取一个中缀表达式,我想将其转换为后缀表达式。

例如这是文本文件中的内容

1+1
2+2

我一次读一行的表达式如下

 char c;
 string readLine; 
ifstream txtfile("a1.txt");
 while ( getline (txtfile,readLine) ) // read line by line
    {
        cout << readLine << endl;

        // how can I set c to be the first character from the read line


         infix_to_postfix(stack, queue,c );

    }

我的问题是如何让变量C等于读取行中的第一个字符,以便将其发送到我的infix_to_postfix函数?然后第二个字符 .. 一直到行尾。

第一行读完后,我想读第二行并一次将一个字符发送到我的 infix_to_postfix函数。我希望我在这里清楚,谢谢!

4

3 回答 3

2

get对单个字符使用该方法:

char c;
std::ifstream txtfile("a1.txt");
while (std::getline(txtfile, readLine))
{
    while (txtfile.get(c))
        infix_to_postfix(stack, queue, c);
}
于 2013-10-08T02:25:59.913 回答
2

你也可以使用std::stringstream

#include <sstream>

// insert the following inside the getline loop

std::stringstream ss(ReadLine);

char c;

while (ss >> c) 
    infix_to_postfix(stack, queue, c);
于 2013-10-08T02:29:22.667 回答
1

您可以使用带有索引std::string的常规循环来迭代字符,如下所示:for

for (int i = 0 ; i != readLine.size() ; i++) {
    infix_to_postfix(stack, queue, readLine[i]);
}

或使用迭代器:

for (string::const_iterator p = readLine.begin() ; p != readLine.end() ; ++p) {
    infix_to_postfix(stack, queue, *p);
}

就性能而言,这两个片段之间几乎没有差异(如果有的话),因此选择取决于您。

于 2013-10-08T02:25:14.677 回答