从文件中读取行并将它们分成两个数字并执行计算并将它们写入文件c ++

时间:2015-10-18 22:18:10

标签: c++ string file input

!!!!严格没有指针或数组!!

文件中的示例内容。

33 + 20

最多17和53

14减-5

4次10

44 - 9

4 * 10

8/3

33 + 20

8除以3

最低67分和83分

我编写了以下代码来识别关键字但我无法检索数字

"#includeiostream"

"#includefstream"

"#includestring"

使用namespace std;

int main(){

ifstream op;
int s;
string line;
op.open("t.txt");
string f[10] = { "+", "plus", "-", "minus", "/", "divided", "Min", "Max", "*", "times" };

while (!op.eof()) {

    getline(op, line);
    cout << line << endl;
    for (int i = 0; i < 3; i++) {
        s = line.find(f[i]);
        if (s!=-1) {
            if (f[i] == "+" || f[i] == "plus")
                cout << "perform addition" << endl;
            else if (f[i] == "-" || f[i] == "minus")
                cout << "Perform subtraction"<<endl;
            else if (f[i] == "*" || f[i] == "times")
                cout << "Perform multiplication" << endl;
            else if (f[i] == "/" || f[i] == "divided")
                cout << "Perform division" << endl;
            else if (f[i] == "Max")
                cout << "Max" << endl;
            else if (f[i] == "Min")
                cout << "Min" << endl;

        }
    }
}
op.close();
system("pause");

}

1 个答案:

答案 0 :(得分:1)

嗯,你有一个良好的开端,但你还有一些工作要做。你的循环(大部分)会找到要在每一行上执行的操作(注意那个一元减号)。查找操作的操作数将会有点棘手,除非您被允许使用正则表达式,否则将涉及一些字符操作。

基本思想将会是这样的。从该行的开头开始搜索,直到找到第一个数字。这可以通过多种方式完成,包括使用像isdigit这样的库函数来实现更强力的方法,如:

if(line [i]&gt; =&#39; 0&#39;&amp;&amp; line [i]&lt; =&#39; 9&#39;)

一旦你找到一个数字,继续积累字符,直到你不再找到一个数字。您找到的数字可以通过多种方式转换为实际数字。您可以使用类似atoi的库函数,您可以使用stringstream类,您可以使用scanf,或者您可以通过将前一个数字乘以10并添加当前数字来自己构建数字:

int sum = 0;
while (isdigit(line[i]))
{
    sum = sum * 10 + line[i] - '0';
    i++;
}

一旦停止查找数字,请继续查看该行中的字符,直到找到第二个数字。重复上述过程(上图)以创建第二个操作数。如前所述,您将需要处理一元减号出现的情况。此时,您应该拥有两个操作数和操作符,然后可以执行表达式并输出结果。