需要一些c+的建议+;计算器 P>我曾被要求创建一个C++计算器,它把用户输入作为一个字符串方程,比如“-2.5+40×3×8/2”,它将从左到右(不遵循的操作顺序)和输出138作为答案。每个操作符和操作数之间必须有空格。

需要一些c+的建议+;计算器 P>我曾被要求创建一个C++计算器,它把用户输入作为一个字符串方程,比如“-2.5+40×3×8/2”,它将从左到右(不遵循的操作顺序)和输出138作为答案。每个操作符和操作数之间必须有空格。,c++,C++,我做了一个计算器,但它只对一位数的正整数有效。下面是代码 #include <iostream> #include <string> float calculator(string input){ float result = 0; for(int i = 0; i < input.length(); i++){ if(input[i] == '+'){ result += (input[i-2]-'0')

我做了一个计算器,但它只对一位数的正整数有效。下面是代码

    #include <iostream>
    #include <string>

    float calculator(string input){
    float result = 0;
    for(int i = 0; i < input.length(); i++){
    if(input[i] == '+'){
    result += (input[i-2]-'0') + (input[i+2]-'0');
    }
    return result;
    }

int main(){
string input = "";
cout << "enter string" << endl;
getline(cin, input);
cout << calculator(input) << endl;
#包括
#包括
浮点计算器(字符串输入){
浮动结果=0;
对于(int i=0;i>op1;
cin>>num2;
cin>>op2;
cin>>num3;
如果(op1=='/'){
答案=num1/num2;
}
如果(op1=='*'){
答案=num1*num2;
}
如果(op1='-'){
答案=num1-num2;
}
如果(op1=='+'){
答案=num1+num2;
}

cout尝试用解析数字,而不是逐字符读取字符串

编辑
< P> >可能是更好的方法,

<代码> Strutok>代码>可能不是一个好的解决方案,这里是C++和ALL。Ya阅读Strutk,我似乎理解它是针对C样式的字符串,因为输入语言在操作数和运算符之间总是有空白,那么,只是<代码> > >代码>是的,我保证每个操作符之间有一个空格。因此cin>>将读取第一个操作数,而字符串的其余部分仍在输入缓冲区中,然后我的下一个cin>>将是我的运算符,依此类推……我尝试了一段时间(!cin.eof)循环,但它永远不会退出循环。@Robᵩ 你能看看我上面的编辑,看看我的第二段代码吗?它利用了cin>>但我被卡住了。你需要“标记化”“输入使
12
成为一个单独的单元,而不是将
1
2
视为单独的部分。是否保证每个标记之间有空格?如果是这样,一个
std::istringstream
并使用
>
读入
std::string
可能会有所帮助。@user4581301”“每个运算符和操作数之间必须有空格。”--听起来像是一种保证。是的,我保证每个运算符和操作数之间有空格。因此cin>>将读取第一个操作数,而字符串的其余部分仍在输入缓冲区中,然后我的下一个cin>>将是我的运算符,依此类推……我尝试了一会儿(!cin.eof)循环,但它永远不会退出循环。@Robᵩ 是时候检查我的眼睛了。billy bob,<代码> GETLION 就像你正在做的那样,用一个<代码> StrugSuth把这条线拆开,就像这个答案:顺便说一下,在EOF循环之前考虑所有的选项。在这种情况下,<代码> CIN < /代码>没有一个容易定义的文件结尾,因为它是程序控制台。o关闭控制台以关闭文件,然后您将无法再与程序通话。
  int main(){
float num1 = 0, num2 = 0, num3 = 0, answer = 0;
char op1, op2;
cout << "enter string\n";
cin >> num1;
cin >> op1;
cin >> num2;
cin >> op2;
cin >> num3;

if(op1 == '/'){
answer = num1/num2;
}

if(op1 == '*'){
answer = num1*num2;
}

if(op1 == '-'){
answer = num1-num2;
}

if(op1 == '+'){
answer = num1+num2;
}

cout << "answer is " << answer << endl;

return 0;
}