2016-01-22 24 views
5

Operatör için bir char standım var, toplamda dört operatör (+ - * /) var.aritmetik işlecine dönüşümü dönüştürme

yaptım nasıl: Bunu yapmak için daha kolay bir yoludur

int Compute(char c, int a, int b) 
{ 
    if(c == '+') 
     return a+b; 
    else if(c == '-')  
     return a-b; 
    else if(c == '*') 
     return a*b; 
    else (c == '/') 
     return a/b; 
} 

var mı?

+3

Cevabın hayır olduğunu düşünüyorum. – Sahi

+3

'Daha uygun' ile ne demek istiyorsun? –

+0

Olası yinelenen [işleci aritmetik için asıl operatöre char + + 'olarak dönüştürebileceğim bir yol var mı?] (Http://stackoverflow.com/questions/19242330/is-there-a-way-i -can-convert-an-operatör-as-a-char-içine-gerçek-operatör) – Henrik

cevap

4

Bir switch deyimi kullanabilirsiniz:

int Compute(char c, int a, int b) 
{ 
    switch (c) { 
    case '+': return a+b; 
    case '-': return a-b; 
    case '*': return a*b; 
    case '/': return a/b; 
    default: throw std::runtime_error("No such operator"); 
    } 
} 
+0

bölme –

0
Öncelikle

,

else (a == '/') 
    return a/b; 

yanlıştır sözdizimi ve

else if (a == '/') 
    return a/b; 

İkincisi, sizin a parametre yalnızca 4 ayrı değerler alabilir olmalıdır, bu nedenle iyi bir uygulama, örneğin bir numaralandırma kullanmaktır Compute kullanıcı, sadece operasyon (a) parametre için bu dört değerden birine kullanımı garanti eder

enum Operation 
{ 
    kAddition, 
    kSubtraction, 
    kMultiplication, 
    kDivision 
}; 

int Compute(Operation a, int a, int b) 
{ 
    if (a == kAddition) 
     return a+b; 
    else if (a == kSubtraction)  
     return a-b; 
    else if (a == kMultiplication) 
     return a*b; 
    else if (a == kDivision) 
     return a/b; 
} 

.

Muhtemelen örneğimdeki en iyi uygulamaları kullanmadım, bu yüzden daha fazla ayrıntı için this answer numaralı telefonu okumanızı tavsiye ediyorum.

Son olarak bir switch deyimi kullanarak kod daha özlü yapabilir:

enum Operation 
{ 
    kAddition, 
    kSubtraction, 
    kMultiplication, 
    kDivision 
}; 

int Compute(Operation a, int a, int b) 
{ 
    switch (a) 
    { 
     case kAddition: 
      return a+b; 
     case kSubtraction: 
      return a-b; 
     case kMultiplication: 
      return a*b; 
     case kDivision: 
      return a/b; 
    } 
} 
+0

Evet, haklısın. ama neden başka (a == '/') yanlış? – Superxy

+0

@Superxy Doğru sözdizimi için bu eğiticiye bakın. http://www.cplusplus.com/doc/tutorial/control/ – Archimaredes

+0

Şimdi anlıyorum, teşekkürler. – Superxy

0
int ComputeByChar(char a, int c, int b) 
{ 
    switch(a) 
    { 
    case '+': return c+b; 
    case '-': return c-b; 
    case '/': return c/b; 
    case '*': return c*b; 
    default: cout<< "Invalid"; 
     break; 
    } 
    return 0; 
} 
+0

durumunda b! = 0 için bir kontrol ekleyebilirsiniz. Bu soruya cevap verebilirken, bu kodun nasıl yardımcı olduğuyla ilgili bazı açıklamalar vermek daha iyidir. – vard