1

私のプログラムは式を1つの値に減らします。アクションのキャラクターとして「charsign」を変更するのに問題があります。簡単な解決策やその方法を教えていただけますか?

私は試した:

(tab[i]-'0') 'sign' (tab[i+1]-'0'); 

これは完全なコードです:

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{

    char* tab = "12+";
    int b = sizeof (tab);
    char* tmp = new char[b] ;
    tmp [b-1] = '\0';

    int k = b/3;

    for(int i=0; i<k; i++){

            if(isdigit(tab[i]) && isdigit(tab[i+1]) ){

               if(tab[i+2]=='+' || tab[i+2]=='-' || tab[i+2]=='*'){
                  char sign = tab[i+2];

                  int n = (tab[i]-'0') + (tab[i+1]-'0');  //here is a problem, i want to replice + as a char sign which will be recognized

                  tmp[i] = n+'0';
               }
               else goto LAB;
            }

            else if (isdigit(tab[i]) && isdigit(tab[i+2])){


            }
            else if (isdigit(tab[i+1]) && isdigit(tab[i+2])){

            }


            else 
            LAB:
            tmp[i]= tab[i];

    }

    cout<<"Import "<<tmp[0]-'0'<<endl;        


    system("PAUSE");
    return EXIT_SUCCESS;
}
4

2 に答える 2

0
int n;
switch(sign){
   case '-': 
      n = (tab[i]-'0') - (tab[i+1]-'0');
      break;
   case '+': 
      n = (tab[i]-'0') + (tab[i+1]-'0');
      break;
   case '*': 
      n = (tab[i]-'0') * (tab[i+1]-'0');
      break;
   default: 
      // handle error here;
      break;
}
于 2012-04-15T19:25:25.190 に答える
0

演算子または関数名をユーザーが指定したシンボルに置き換えることはできません。これは、コンパイラーが呼び出す関数を認識しなければならず、「+」文字を変換operator+(int, int)して言語に埋め込まれた呼び出しを行うメカニズムがないためです。自分で書く必要があります。

最も簡単な解決策は、サポートするすべての演算子を明示的に記述することです。

int n;
switch(tab[i+2]){
    case '+':
        n = (tab[i]-'0') + (tab[i+1]-'0');
        break;
    case '-':
        n = (tab[i]-'0') - (tab[i+1]-'0');
        break;
    // etc...
}
于 2012-04-15T19:21:59.787 に答える