加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

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

(2009-05-09 13:12:33)
标签:

杂谈

分类: 计算机学习

方法一

C/C++ code

    try
    {
        StrToInt(Edit1
->Text);
    }
   
catch(EConvertError &e)
    {
        ShowMessage(
"非整数!");
    }

 

方法二

如输入的字串附给了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;
}

 

方法三

 

vc6.0

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';
}


说明
其实不管从哪里输入的,都是一个字符,是你自己把它弄成整数了。
而且现在麻烦一点点,只是那么一点点。

不管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 时候,取不到


方法五

int   function(string   str)  
  {  
  int   i(0);  
  while   (i   <   str.size())  
  {  
  if   (!isdigit(str[i]))  
  {  
  return   -1;//  
  }  
  i   ++;  
  }  
   
  return   atoi(str.c_str());  
 

 
方法六

include   <iostream>  
  #include   <string>  
   
  void   function(std::string   &test);  
   
  int   main(   )  
  {  
          std::string   test;  
          while(getline(std::cin,test))  
                  function(test);  
  }  
   
  void   function(std::string   &test)  
  {  
          std::string::iterator   pos=test.begin();  
          while(pos!=test.end()){  
                  if   (*pos>'9'   ||   *pos<'0')  
                          return;  
                  pos++;  
          }  
          std::cout<<test<<std::endl;  
  

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有