0

我修复了 -'0' 错误,现在我的输出与我的输入有些相关。我相信它将我的第一个“c”值乘以 10,而不是其他值。如何获得像 143 这样的数字的正确值以计算到我的输出中?

#include <vector>
#include <string>
#include <iostream>

using namespace std;
class token { 
    public: char kind;
            char value;
};

int main(){
    vector<token> vt;
    char c;
    token t;
    int res = 0;
    while (cin>>c){
        if(c!= '+' && c!= '-' && c!= '='){

            res = res*10+c-'0';
        }
        else {
            t.kind = c;
            t.value = res;

            vt.push_back(t);
            res = 0;

        }
        if (c=='=')
            break;
    }
    int num = vt[0].value-'0';
    for(int i=0; i<vt.size(); i++){
        if (vt[i].kind=='+')
            num+=vt[i+1].value-'0';
        if (vt[i].kind=='-')
            num-=vt[i+1].value-'0';
    }
    cout<<num;
    system("pause");
}
4

4 回答 4

1

读取输入时减去“0”就足够了,迭代元素时不必再次减去它。

于 2012-10-28T21:35:56.393 回答
1

除了其他答案之外,标题中的测试数据不会给您预期的结果,因为对于介于 -128 和 127 之间235的有符号来说太大了。您应该选择一个来代替更大的操作数。charint

于 2012-10-28T21:39:43.017 回答
0

在最后一个循环中减法'0'是第一个问题,您已经在第一个循环中减去了它。

另一个问题是,正如其他人指出的那样,您应该为token::value (intunsigned char) 使用其他类型。(如果您将 235 存储在 中char,它将最终为 -21...)

最后,您迭代最后一个循环vt.size()时间,然后使用 vt[i+1].value - 所以您在向量结束后读取。循环应该只是

for (int i=0; i<vt.size()-1;++i) {

另外,不要忘记您的程序需要终止输出'='(并且它不在您的问题的标题中)

编辑:我将编辑合并到下面的代码中。对于输入4+44-67+235=,它会产生 result 216。但是您必须使用 last '=',否则您不会存储最后一个值,结果将是-19.

using namespace std;
class token { 
public: 
    char kind;
    int value;
};

int main(){
vector<token> vt;
char c;
token t;
int res = 0;
while (cin>>c){
    if(c!= '+' && c!= '-' && c!= '='){
        res = res*10+c-'0'; 
    }
    else {
        t.kind = c;
        t.value = res;

        vt.push_back(t);
        res = 0;
    }
    if (c=='=')
        break; 
}

int num = vt[0].value;
    for(int i=0; i<vt.size()-1; i++){
        if (vt[i].kind=='+')
                    num+=vt[i+1].value;
        if (vt[i].kind=='-')
            num-=vt[i+1].value;
    }
cout<<num <<endl;
system("pause");
}
于 2012-10-28T22:03:02.920 回答
0

您已经将输入转换为数字,res = res * 10 - '0'然后使用 and 再次执行此操作vt[0].value - '0'vt[i].value - '0'这会导致无效输出

于 2012-10-28T21:35:55.250 回答