【发布时间】:2014-04-06 00:09:23
【问题描述】:
我正在尝试用 C++ 编写一个程序,用户将在其中输入一个方程式(例如:y = 3x + 6)。我如何确定什么是值、什么是角色以及它们在哪里?
所以从这个例子中,我会知道:
- 值 3 在位置 stringArray[4]
- 值 6 在位置 stringArray[9]
- 字符 x 位于 stringArray[5] 位置
我该怎么写?
当我在 Visual Studio 2013 中输入y = 3x 时,它会出现一个错误框:
Unhandled exception at 0x77662EEC in Graphmatica_WhatsInDatInput.exe: Microsoft C++ exception: std::invalid_argument at memory location 0x00FAF94C.
但是当我输入任何不是以字符开头的东西时,这很好(例如1 + 3x)
这是我目前的代码:
#include <iostream>
#include <string>
using namespace std;
int main(){
string Equation;
double dNumber;
cout << ": ";
getline(cin, Equation);
for (int i = 0; i < Equation.size(); i++){
if (isdigit(Equation[i])) {
cout << "Number: ";
dNumber = stod(Equation);
cout << dNumber << endl;
}
else {
if (Equation[i] != ' ') {
cout << "Character" << endl;
}
}
}
cout << endl;
system("pause");
}
【问题讨论】:
-
您决定哪些字符有意义(即运算符),哪些字符没有意义(即空格),哪些是文字(即数字),哪些是变量(即字母)。然后你一次遍历一个字符,对字符进行相应的分类并决定如何处理它。注意:这并不意味着你盲目地从左到右执行事情:算术有规则。但是您会发现这与您阅读方程式的方式相同:从左到右,一次一个字符。计算机只需要有关如何执行此操作的帮助和说明。
-
Infix expression evaluation 的可能重复项
-
我不认为这是重复的,尽管该问题提供了有关如何解析此类表达式以及如何解决此问题的见解。这个问题涉及到变量的使用,以及如何将它们与表达式中的其他“事物”区分开来。
-
@user3502489 'I get an error.' 太模糊了,请解释一下(再次修改你的问题!)。
-
已编辑!我的错误是:Graphmatica_WhatsInDatInput.exe 中 0x77662EEC 处的未处理异常:Microsoft C++ 异常:内存位置 0x00FAF94C 处的 std::invalid_argument。
标签: c++ arrays string data-conversion