- 就是遍历判断这个字符串,每个字符十分符合ASCii数字的范围。
摘抄如下:
bool AllisNum(string str)
{
for (int i = 0; i < str.size(); i++)
{
int tmp = (int)str[i];
if (tmp >= 48 && tmp <= 57)
{
continue;
}
else
{
return false;
}
}
return true;
}
- 使用c++库函数stringstream,将串流输入到数字时,如果不是纯数字会设置failbit 。
摘抄如下:
bool isNum(string str)
{
stringstream sin(str);
double d;
char c;
if(!(sin >> d))
{
return false;
}
if (sin >> c)
{
return false;
}
return true;
}
- 使用c库函数atoi,atol系列函数,当非纯数字时,会返回0。因此如果不考虑0,程序编写上最简便。
int isNum(const char *st)
{
int num = atoi(st);
if(num != 0) return 0;
else return -1;
}
2、3有一个小例外,当数字前面有空格时,依然会转换成功,所以如果要用该方法又在意空格的存在性,要先将前导空格去除。要强调的是,在数字后有空格时,也不能使用。总之空白在c中偏向于视为不存在。所以当考虑时,需要特殊处理。 很明显2、3不能应对进制转换问题(废话)。
|