簡體   English   中英

C 比較運算符優先級

[英]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;

枚舉必須是標識符名稱,而不是字符。 我建議將它們命名為PLUSMINUS等(另外,為什么%的優先級高於^事實上的標准是給予%*/相同的優先級。)

#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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM