1

我想接受用户的输入(数学表达式)并将其推入堆栈。然后我想通过一些规则来运行它,询问它是一个'(',一个数字还是一个运算符'+'。我的问题是到目前为止我不知道如何判断,特别是在while循环中首先说明if声明,如果一个字符“实际上”是一个数字。有什么建议吗?

#include <stack>

int main()
{
    std::stack<char> myStack;    // initializing the stack
    char line[40]; 
    cin.getline(line, 40);       // this and the proceeding line get the input

    for (int i = 0; i < 40; i++)
        myStack.push(line[i]);   //pushing all of the char onto the stack.

    while (!myStack.empty()) {
        if (myStack item = a number) {
        // ^ this is where it doesn't compile.
        //   I need to figure out how to find out if a char is a number
            cout << item << endl;
        }
        else if (myStack.empty()) {
            myStack.push(item);
        }
    }
}
4

4 回答 4

2

C++中有一个叫做isdigit的函数,它检查一个字符是否是十进制数字。

if(isdigit(your_char)) //Then it's a number
于 2013-04-18T16:35:43.110 回答
1

在 stdlib 中有一个函数isdigit()可以为你回答这个问题。

然而,它没有魔法。ASCII 中的数字正好chars在 range 48-5748being'0'57being 中'9'

char isdigit(char d) {
    return (d >= 48) && (d <= 57);
}
于 2013-04-18T16:37:23.327 回答
1

使用isdigit函数:

isdigit(x)
于 2013-04-18T17:30:52.853 回答
0

根据您的问题,如果您只想查找 char 是否为数字。请将其转换为 int 并检查它是否在 48 和 57 的 ascii 值之间,两者都包括在内。

bool CheckIfNum(char chartToCheck)
{
    int aciiOfChar = (int) charToCheck;

    if (asciiOfChar >= 48 && asciiOfChar <= 57)
        return true;

    return false;
}

你也可以使用 std::isdigit 函数

于 2013-04-18T16:36:43.390 回答