我正在从文本文件中读取中缀表达式,我想将其转换为后缀表达式。
例如,文本文件
中的内容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
函数。我希望我在这里很清楚,谢谢!
答案 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);
}
两个片段在性能方面差异很小(如果有的话),所以选择取决于你。