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

1

isdigit関数を使用します。

isdigit(x)
于 2013-04-18T17:30:52.853 に答える
1

isdigit()この質問に答える stdlib で呼び出される関数があります。

ただし、魔法はありません。数字は、ASCII では、 、 、 、のchars範囲内48-5748あり'0'ます。57'9'

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

あなたの質問に基づいて、あなたが望むのは、charが数値かどうかを調べることだけです。int にキャストして、ASCII 値の 48 と 57 の間にあるかどうかを確認してください。

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 に答える