C++查看参数是否为数字
C++ See If Argument Is Numeric
我正在用C++创建一个加密/解密程序,我使用三个用户提供的数字来自定义加密。我在cplusplus.com上读到了关于isdigit()的文章,并在此基础上制作了一个函数:
bool is_numeric(char *string)
{
int sizeOfString = sizeof(string);
int iteration = 0;
bool isNumeric = true;
while(iteration < sizeOfString)
{
if(!isdigit(string[iteration]))
{
isNumeric = false;
break;
}
iteration++;
}
return isNumeric;
}
然而,它似乎不起作用。无论我给它一个数字,还是一个非数字字符,它仍然返回false。我的方法出了什么问题。
我想我应该使用一个标准算法:
bool is_numeric(char const *string)
{
return std::all_of(string, string+strlen(string),
[](unsigned char c) { return ::isdigit(c); });
}
请注意,就目前情况来看,您的代码可能(通常)具有未定义的行为(如果字符串包含任何在编码为char时显示为负数的内容)。这段代码通过在char
传递给lambda时将其转换为unsigned char
来防止这种情况——这就是为什么我使用lambda而不是仅将::isdigit
作为谓词传递给all_of
。
您计算的sizeOfString
错误。试试这个。
bool is_numeric(char *string)
{
int sizeOfString = strlen(string);
int iteration = 0;
bool isNumeric = true;
while(iteration < sizeOfString)
{
if(!isdigit(string[iteration]))
{
isNumeric = false;
break;
}
iteration++;
}
return isNumeric;
}
您可能还需要添加检查.
字符的功能!现在,只有当字符串是整数时,代码才会返回true。
while ('0' <= *string && *string <= '9')
++string;
return *string == ' ';
或者,如果您喜欢使用isdigit
:
while (is digit((int)*string))
++string;
return *string == ' ';
另一种可能的解决方案是使用字符串流:
bool isNumeric(const string& s) {
stringstream ss(s);
int val;
ss >> val;
return ! ss.fail() && ss.eof();
}
如果给定的字符串不是数字,则字符串流::operator>>(int&)将设置字符串流的失败位,并且您需要检查字符串中的所有内容是否都是一个整数(没有其他内容),因此您还测试eof位。这也适用于负数,如果您想接受浮点数,也可以将int更改为double。
相关文章:
- 用于检查数字是否有数字或可被该数字的值整除的程序
- 如何使用递归检查数字是否有重复数字?
- 查找数字是否为 2 的幂的时间复杂度
- 将 C 函数转换为 C++ 以检查数字是否有效
- 检查数字是否为素数的算法
- 在C/C++中检查数字是否为整数(不带scanf/gets/etc)
- 如何以更有效的方式检查一个数字是否是素数?
- C++显示两个区间之间的数字的程序检查一个数字是否可以表示为两个素数的总和
- 如何检查字段中输入的数字是否重复
- 查看数字是否包含在未排序的双数字间隔内的最有效方法?
- 检查数字是否已在数组中的程序
- 编写一个函数,用递归函数检查数字是否是正方形
- 使用模量来找出数字是否可以除去不起作用的变量
- 查找数字是否为素数 c++
- 如何测试某些数字是否沿区间均匀分布?
- 这是确定两个数字是否具有相同奇偶校验的正确方法
- 如何检查 stdin 中的数字是否小于给定类型的数字限制
- 更好的算法来检查一个数字是否既不是素数也不是单个素数的幂
- 如何在不使用数学的情况下知道一个数字是否是回文
- 验证每个数字是否在特定条件下