如果exp [i]是一個數字,爲什麼我們在推送過程中傳遞exp [i] - '0',但在運算符的情況下不會這樣做:val2運算符val1 - ' 0' 。我想這與ascii有關,我們想插入2然後ascii的char 2 - ASCII的char 0 = 2在十進制中,我們把它推入棧(這是int數組,但參數是字符操作),但我們不如果它是一個操作員,也要這樣做。另外,如果我們將push中的第二個參數作爲「char」op來接收,那麼爲什麼我們需要將其轉換爲ascii,並且如果我們在第二個參數push中將char更改爲int op,它也不會影響輸出? 一個連結[] http://geeksquiz.com/stack-set-4-evaluation-postfix-expression/Postfix評估中的數據類型轉換
void push(struct Stack* stack, char op)
{
stack->array[++stack->top] = op;
}
int evaluatePostfix(char* exp)
{
struct Stack* stack = createStack(strlen(exp));
int i;
if (!stack) return -1;
for (i = 0; exp[i]; ++i)
{
// If the scanned character is an operand or number,
// push it to the stack.
if (isdigit(exp[i]))
push(stack, exp[i] - '0');
// If the scanned character is an operator, pop two
// elements from stack apply the operator
else
{
int val1 = pop(stack);
int val2 = pop(stack);
switch (exp[i])
{
case '+': push(stack, val2 + val1); break;
case '-': push(stack, val2 - val1); break;
case '*': push(stack, val2 * val1); break;
case '/': push(stack, val2/val1); break;
}
}
}
return pop(stack);
}
int main()
{
char exp[] = "231*+9-";
printf ("Value of %s is %d", exp, evaluatePostfix(exp));
return 0;
}
char c [] = {1,2,3,4}; int z = c [1] - '0'; printf(「%d」,z);它打印-46 但你說digitchar - '0'應該給我們數字值,在這種情況下,它應該給我們2(50-48) – Stack
@Stack這不是我說的。我說如果你做'char c [] = {'1','2','3','4'};'你會得到數字值。您示例中的{1,2,3,4}不是數字字符代碼(它們甚至在許多系統上都不可打印)。 – dasblinkenlight
爲結構編譯器隱式轉換它。從輸入數組,當我們通過exp [1]沒有 - '0'它評估爲50,確實exp [1] =='1'或1? – Stack