我想根据运算符优先级对字符进行排名。我不确定最有效的方法是什么。我应该将字符映射到从最大到最小的数字吗?也许使用union find数据结构?
答案 0 :(得分:2)
因为它听起来像你想排名的字符代表运算符,我假设你想要映射的字符数很少。如果所有这些字符都是常规的8位char
s,那么您可以简单地定义一个代表优先级的256个数字的数组:
uint8_t precedence[256] = { 0 };
precedence['*'] = 1;
precedence['/'] = 1;
precedence['%'] = 1;
precedence['+'] = 2;
precedence['-'] = 2;
precedence['!'] = 2;
precedence['~'] = 2;
precedence['&'] = 3;
precedence['^'] = 4;
precedence['|'] = 5;
注意:我在本例中使用的字符在今天相关的编码中是正面的。但是,如果您使用其他字符或外来编码,并且您用于索引的某些字符为负数,则需要添加强制转换以避免未定义的行为:
precedence[(uint8_t)'|'] = 5;