!!!!严格没有指针或数组!!
文件中的示例内容。
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");
}
答案 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++;
}
一旦停止查找数字,请继续查看该行中的字符,直到找到第二个数字。重复上述过程(上图)以创建第二个操作数。如前所述,您将需要处理一元减号出现的情况。此时,您应该拥有两个操作数和操作符,然后可以执行表达式并输出结果。