如何逐行读取文本文件然后解析一行中的字符?

时间:2013-10-08 02:18:16

标签: c++ parsing

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

例如,文本文件

中的内容
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函数。我希望我在这里很清楚,谢谢!

3 个答案:

答案 0 :(得分:2)

对单个字符使用get方法:

char c;
std::ifstream txtfile("a1.txt");
while (std::getline(txtfile, readLine))
{
    while (txtfile.get(c))
        infix_to_postfix(stack, queue, c);
}

答案 1 :(得分: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);

答案 2 :(得分: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);
}

两个片段在性能方面差异很小(如果有的话),所以选择取决于你。