[英]C Compare operator precedence
你好,我有一個方法叫
整數比較(字符 op1,字符 op2)
該方法將根據比較結果return 1, -1 or 0
。 (如果 op1 < op2,則為 1)。
我需要比較以下操作:
- subtraction
* multiplication
/ division
^ exponentiation
% remainder
我考慮過使用枚舉,例如:
enum ops{
'+'=1, '-'=1, '*'=2, '/'=2, '^', '%'
}var;
但這不會編譯。 任何人都可以伸出援助之手嗎?
您不能將字符用作枚舉的鍵,您應該執行以下操作:
enum ops {
OP_PLUS = 1,
OP_MINUS = 1,
OP_MULT = 2,
OP_DIV = 2,
OP_POWER,
OP_MOD
} var;
枚舉必須是標識符名稱,而不是字符。 我建議將它們命名為PLUS
、 MINUS
等(另外,為什么%
的優先級高於^
?事實上的標准是給予%
與*
和/
相同的優先級。)
#include <stdio.h>
struct precedence
{
char op;
int prec;
} precendence[] =
{ { '+', 1 },
{ '-', 1 },
{ '*', 2 },
{ '/', 2 },
{ '^', 3 },
{ '%', 4 },
{ 0, 0 }};
int compare(char *a, char *b)
{
int prec_a = 0, prec_b = 0, i;
for(i=0; precendence[i].op && (!prec_a || !prec_b); i++)
{
if (a == precendence[i].op)
prec_a = precendence[i].prec;
if (b == precendence[i].op)
prec_b = precendence[i].prec;
}
if (!prec_a || !prec_b)
{
fprintf(stderr,"Could not find operator %c and/or %c\n",a,b);
return(-2);
}
if (prec_a < prec_b)
return -1;
if (prec_a == prec_b)
return 0;
return 1;
}
main()
{
char a,b;
a='+'; b='-'; printf("Prec %c %c is %d\n", a,b,compare(a,b));
a='+'; b='*'; printf("Prec %c %c is %d\n", a,b,compare(a,b));
a='+'; b='^'; printf("Prec %c %c is %d\n", a,b,compare(a,b));
a='+'; b='%'; printf("Prec %c %c is %d\n", a,b,compare(a,b));
a='*'; b='+'; printf("Prec %c %c is %d\n", a,b,compare(a,b));
a='^'; b='+'; printf("Prec %c %c is %d\n", a,b,compare(a,b));
a='%'; b='+'; printf("Prec %c %c is %d\n", a,b,compare(a,b));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.