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

他の回答に加えて、タイトルのテストデータでは、-128〜127235の符号付きに対して大きすぎるため、期待される結果が得られません。代わりに、より大きなオペランドをカバーするように選択する必要があります。charint

于 2012-10-28T21:39:43.017 に答える
1

入力を読み取るときに「0」を減算するだけで十分です。要素を反復処理するときに再度減算する必要はありません。

于 2012-10-28T21:35:56.393 に答える
0

最後のループでの減算'0'は最初の問題です。すでに最初のループで減算しています。

もう1つの問題は、他の人が指摘しているように、token::valueintまたはunsigned char)に他のタイプを使用する必要があることです。(235をに格納charすると、-21になります...)

最後に、最後のループvt.size()時間を繰り返してから、vt [i + 1] .valueを使用します。これにより、ベクトルの終了後に読み取りを行うことになります。ループは

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

また、プログラムでは出力をで終了する必要があることを忘れないでください'='(質問のタイトルには含まれていません)。

編集:私は編集を以下のコードにマージしました。入力の4+44-67+235=場合、結果が得られ216ます。ただし、最後を使用する必要が'='あります。そうしないと、最後の値が保存されず、結果はになります-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

で入力を数値に変換してから、 andres = res * 10 - '0'で再度変換するvt[0].value - '0'vt[i].value - '0'、無効な出力が発生します

于 2012-10-28T21:35:55.250 に答える