在c++中如何判断输入的数据是否是整数

rabbit_zizhu 2008-03-11 10:05:30
在c++中如何判断输入的数据是否是整数.
还有如何判断输入的数据在一个整数的范围呢
...全文
3860 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
rabbit_zizhu 2008-04-06
  • 打赏
  • 举报
回复
各位不好意思.由于分数太少,最后这位没分给了.呵呵.将就一下吧.
truelove7283159 2008-03-26
  • 打赏
  • 举报
回复
其实不管从哪里输入的,都是一个字符,是你自己把它弄成整数了。
而且现在麻烦一点点,只是那么一点点。

不管cmd窗口是一个输入的,等下有个方法可以判断的。
文本框输入,程序的命令行、参数 你拿到手就是一个字符串。

1 首先,把从最左面开始是零的过滤掉。
那么剩下的可能就是正负数字了(+XXXXXXXXXXXXXXXx/-XXXXXXXXXXXXXXXXXXXXXx)(x 0~9)
2 计算字符串的长度
2.1 在之前看看定义 msdn里有
_I64_MAX 9223372036854775807
_I64_MIN 9223372036854775807

char I64INTMAX[] = "9223372036854775807";
char I64INTMIN[] = "9223372036854775808";
char INTFLAG[] = "+-";

__int64 x= strlen(I64INTMIN)+1; 算正负号
如果你输入的字符串长度比x大,那么输入的当然不是一个数字了。
2.2
char *p = strInput;//输入字符串
isdigit(*p)!=0 每一个用这个来判断一下是不是( 0~9),不让用isdigit也行,反正你能写得出0~9的ascii码,也知道在那个数值之间。

2.3 确认长度没有问题,是( 0~9),前面有正负号,多少个0没有关系。

__int64 value = 0;

// An example of the _atoi64 function
// with leading and trailing white spaces.
str = " -002309 ";
value = _atoi64( str );

2.4 到这里只能保证你根据输入得到一个整数,到底原先输入的应该看是字符串 还时数字那么在继续
_i64toa( value , buffer, 10 ); // C4996
得到的应该和原来输入的是一样的,这个是因为,假如他原来输入的是9223372036854775828,你得到是一个负数。
不过这个情况你也可以认为他是正确的。就看怎么理解了


2.5 如果是uint64的话稍微麻烦,些因为 _UI64_MAX 18446744073709551615 ,输入18446744073709551616 就是-1了。
同样怎么看是不是整数 就要看你的理解了,和程序处理了。


_ui64toa
_atoi64

-----------------------------------------------------------------------------------------------------------

atoi(str); sprintf
都会有问题的,

不是数字的会爆掉
__int64 时候,取不到






rabbit_zizhu 2008-03-22
  • 打赏
  • 举报
回复
呵呵,谢谢你们哈...
有你们的帮助,问题已解决...
mwq831920 2008-03-21
  • 打赏
  • 举报
回复
赞成楼上lanmuyi。
lanmuyi 2008-03-21
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 mwq831920 的回复:]
赞成楼上lanmuyi。
[/Quote]

赞成楼上mwq831920。 呵呵~
laowang2 2008-03-20
  • 打赏
  • 举报
回复
我说一个办法,把输入的数据向下取整(floor),拿原来的数据和取整后的数据相减比较,在0.00001(具体看你需要的精度)和1之间就是小数,否则是整数。
lanmuyi 2008-03-20
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 rabbit_zizhu 的回复:]
我用的是vc6.0
[/Quote]

string ->char* -> int

函数名: atoi
功 能: 把字符串转换成整型数
用 法: int atoi(const char *nptr);
程序例:
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
int n;
char *str = "12345.67";

n = atoi(str);
printf("string = %s integer = %d\n", str, n);
return 0;
}


或者逐个提取字符串中字符,int resule=0; //记录最后结果
while(没到字符串尾)
{
result=result*10+'当前字符'-'0';
}
rabbit_zizhu 2008-03-19
  • 打赏
  • 举报
回复
我用的是vc6.0
mwq831920 2008-03-18
  • 打赏
  • 举报
回复
如果你用的是BCB, String转Int L: str.ToInt()
rabbit_zizhu 2008-03-18
  • 打赏
  • 举报
回复
不是,如输入的字串附给了String类型的参数str:
bool isInt;//是否参数
for(int i=0;i <str.Length();i++)
{
isInt=false;
for(int j=0;j <10;j++)
{
if(str.SubString(i+1,1)==IntToStr(j))
{
isInt=true;
break;
}
}
if(!isInt)
break;
}
////编译的时候有问题
rabbit_zizhu 2008-03-18
  • 打赏
  • 举报
回复
error C2039: 'SubString' : is not a member of 'basic_string<char,struct std::char_traits<char>,class std::allocator<char> >'

error C2065: 'IntToStr' : undeclared identifier

编译的时候出现错误
rabbit_zizhu 2008-03-18
  • 打赏
  • 举报
回复
谢谢你先.

上面那个问题我解决了.但是又出现了一个问题,就是怎样把一个string对象转化成一个int型的值.因为最终我要处理的数据类型还是整型数据
mwq831920 2008-03-18
  • 打赏
  • 举报
回复
倒,你用的是BCB吗?把源程发给我mwq8319202002@yahoo.com.cn
mwq831920 2008-03-17
  • 打赏
  • 举报
回复
不是,如输入的字串附给了String类型的参数str:
bool isInt;//是否参数
for(int i=0;i<str.Length();i++)
{
isInt=false;
for(int j=0;j<10;j++)
{
if(str.SubString(i+1,1)==IntToStr(j))
{
isInt=true;
break;
}
}
if(!isInt)
break;
}
rabbit_zizhu 2008-03-12
  • 打赏
  • 举报
回复
就是用ASCII码来判断吗?说的具体一点阿.谢谢
mwq831920 2008-03-12
  • 打赏
  • 举报
回复
思路:将输入的字串附给一个 String 类型的参数,然后里面的每一个字符是否都是"0"到"9",包含其他字符就判断其不是一个整数!
rabbit_zizhu 2008-03-12
  • 打赏
  • 举报
回复
STL中的numeric_limits类定义了基本数据类型的取值范围信息


//我没接触过STL,可以举个例子吗
rabbit_zizhu 2008-03-12
  • 打赏
  • 举报
回复
C/C++ code try
{
StrToInt(Edit1->Text);
}
catch(EConvertError &e)
{
ShowMessage("·ÇÕûÊý£¡");
}


//不好意思,你写的这些我看不懂,我只是想在DOS下输入,然后进行判断
rabbit_zizhu 2008-03-12
  • 打赏
  • 举报
回复
是在DOS下输入,然后进行判断
samuellei 2008-03-12
  • 打赏
  • 举报
回复
打错了,STL
加载更多回复(6)

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧