gpt4 book ai didi

c++ - isdigit() 和 isalnum() 给出错误,因为输入是 const char 并且无法转换。其他可能查看输入是否为数字的方法?

转载 作者:行者123 更新时间:2023-11-30 02:20:11 25 4
gpt4 key购买 nike

我用谷歌搜索了我的问题,也许我没有使用正确的搜索词,因为我没有找到解决我问题的方法。

我想做的是使用 push 和 pop 方法和模板做一个后缀计算器表达式。

教授的话

Input

The input is a string that represents a postfix expression. To simplify the problem, your calculator will be restricted to operating on single-digit non-negative integers. Only the following characters are allowed in the string:

the operators '+', '-'. '*', and '/' the digits '0' through '9' the space (blank) character ' '

Example input: 2 4 3 * +

Result: 14

To handle spaces in the input, you will need to make one minor addition to the algorithm on page 204 of your textbook:

    if (ch is a blank)
ignore it end if

该程序分为 3 个文件,主文件、模板和虚拟模板。他希望在主文件中尽可能少,大部分检查和计算在模板中完成。

#include <iostream>
#include <string>
#include "ArrayStack.h"
using namespace std;

int main()
{
ArrayStack<string> stack;
string items;
bool done = false;
char decision;

while(!done) // check to see if the user wants to do more calculations
{
cout << "Enter postfix expression: ";
getline(cin, items);


for(int x = 0;x < items.length();x++)
{
stack.push(&items[x]);
cout << "Pushing " << &items[x] << endl;

}

cout << "Done? Y/N: ";
cin >> decision;
if((decision == 'y') || (decision == 'Y')) done = true;
}
}

这是模板的相关功能

template<class ItemType>
bool ArrayStack<ItemType>::push(const ItemType& newEntry)
{
bool result = false;
if (top < MAX_STACK - 1) // Does stack have room for newEntry?
{
//////////////////////////////////////
if(isdigit(&newEntry))
{
top++;
items[top] = newEntry;
result = true;
}
//////////////////////////////////////
} // end if

return result;
} // end push

我的问题是当 isdigit 是一个常量字符时它不能做任何事情,但我不允许在主文件中检查它是数字、空格还是/-+*。我不确定如何进行。我是在使用错误的功能,还是只是没有正确使用它?

最佳答案

您可能希望将类型更改为 unsigned char

ArrayStack<unsigned char> stack;

因为 isdigit()unsigned char 一起工作。

此外,在循环中推送 unsigned char 项目而不是 pointer:

stack.push(items[x]); // don't pass a pointer

更新

根据 cppreference 中的 isdigit() :

The behavior is undefined if the value of ch is not representable as unsigned char and is not equal to EOF.

这在cplusplus.com中是不同的.所以请注意。

因此,您的ItemType 应该是unsigned char

关于c++ - isdigit() 和 isalnum() 给出错误,因为输入是 const char 并且无法转换。其他可能查看输入是否为数字的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50033043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com