您好我有一个名为
的方法int compare(char op1,char op2)
方法将return 1, -1 or 0
取决于比较结果。 (如果op1< op2),则为1。
我需要比较以下操作:
- subtraction
* multiplication
/ division
^ exponentiation
% remainder
我考虑使用如下的枚举:
enum ops{
'+'=1, '-'=1, '*'=2, '/'=2, '^', '%'
}var;
但这不会编译。任何人都可以伸出援手吗?
答案 0 :(得分:3)
您不能将字符用作枚举的键,您应该执行以下操作:
enum ops {
OP_PLUS = 1,
OP_MINUS = 1,
OP_MULT = 2,
OP_DIV = 2,
OP_POWER,
OP_MOD
} var;
答案 1 :(得分:2)
枚举必须是标识符名称,而不是字符。我建议将它们命名为PLUS
,MINUS
等。(另外,为什么%
的优先级高于^
?事实上的标准是授予%
与*
和/
相同的优先权。)
答案 2 :(得分:2)
#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));
}