簡體   English   中英

在C中評估PostFix表達式(新發行)

[英]Evaluating a PostFix Expression in C (New Issue)

我的上一個問題可以在這里找到(只想向這個最有用的社區提供保證,我不會嘗試發送垃圾郵件):

在C中評估后綴表達式

我的問題涉及評估后綴表達式。 說我有一個后綴表達式,例如:

3 2 1 2 + ^ ^

我試圖將值(所有用戶以字符串形式輸入)存儲在堆棧中,並通過使用其他函數進行評估,最終結果是堆棧中唯一要彈出的剩余元素並提出。 經過幾個小時擺弄代碼塊中的調試器后,我發現該函數未在堆棧中存儲任何內容。 此外,當我使用函數檢查指向的字符是否為操作數時(盡管是一個操作數),它會忽略應采取的適當操作。 這也是我所包含的is​​Operand函數使用的代碼:

bool isOperand(char *str)
{
    /** For value 3, str seems to be the entire character string
    being "3 2 1 2 + ^ ^" **/
    return isdigit(str) != 0;
}

int evaluatePostfix(char *postfixStr)
{
    stack * s;
    int x, y, z;

    stackInit(&s);

    while(postfixStr != NULL) {
        /** For the first value 3, it SHOULD be an operand and
        proceed to push it on the stack. But it just skips
        this condition. **/
        if(isOperand(postfixStr)) {
            stackPush(&s, postfixStr);
        }

        if(isOperator(postfixStr) == 1) {
            y = atoi(stackPop(&s));
            x = atoi(stackPop(&s));
            char *str = malloc(10 * sizeof(char));
            sprintf(str, "%d", applyOperator(x, y, postfixStr));
            stackPush(&s, str);
        }
        ++postfixStr;
    }

    z = stackPop(s);
    stackDestroy(&s);
    return z;
}

我不知道如何在指針處僅將其發送一個值。 如果是兩位甚至三位數字,我該如何告訴程序識別出來? 再次感謝您的寶貴時間,我當然感謝人們提供的所有幫助。

****編輯/解決方案****

好吧,由於我還不是“新用戶”,所以我不能回答自己的問題,因此,我將編輯原始帖子,以便將來將來對其他人有用。

似乎令牌化在這里是適當的情況。 通過使用

strtok( 字符串分隔符

該函數將一個字符串分解為較小的字符串,這些字符串之間用空格分隔,似乎是空字符。 我仍然不確定100%是否是因為我使用了字符串空間的定界符(又名“”),但是無論如何。

結束循環

令牌= strtok(NULL,“”);

而不是將指針增加1的效果就足夠了,因為它似乎在獲取原始字符串並在通過將較小的字符串部分從堆棧中完全刪除而將較小的字符串部分推入堆棧時直接對其進行修改。 雖然不是一個好習慣(因為我應該創建原始字符串的副本以保持輸入的完整性並改為修改副本),但我相信它將在此項目的范圍內起作用。 我只是想分享我的發現,以防將來對任何人有用。 另外,如果我的使用說明中有某些事情需要加以糾正,我想知道。

您在指針上調用isdigit

return isdigit(str) != 0;

那應該被指點者

return isdigit(*str) != 0; // or, equivalently: return isdigit(*str);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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