怎么判断一串字符串只有数字?也就是CString sz = _T("122224444455");//不能含有汉字或其他字母求最简单方法,一个一个字符取出来比较我也会,UNICODE环境下。

解决方案 »

  1.   

    // 转化成数字
    bool isAllDigit(const string& str)
    {
        unsigned long  i;
        const char *ch1 = str.c_str();
        char ch2[20];
        i = atol(ch1);
        sprintf(ch2,"%ld",i);   
        if(strlen(ch2) == strlen(ch1))          //若含有非数字字符串,则长度发生变化
        {
            return true;
        }
        else
        {
            return false;
        }
    }
      

  2.   


    bool IsNumber( LPCTSTR pszText )
    {
    for( int i = 0; i < lstrlen( pszText ); i++ )
    if( !_istdigit( pszText[ i ] ) )
    return false;

    return true;
    }
      

  3.   

    atoi( 串 ) > 0肯定只有数字。
      

  4.   


    BOOL IsDigital(LPCTSTR lpszSrc)
    {
      CString Src = lpszSrc;
      return (Src ==  Src.SpanIncluding( _T("0123456789" ) ));
    }//test code
      VERIFY( IsDigital( _T("23456") ) );
      VERIFY( IsDigital( _T("23ABC") ) );
      

  5.   

    atoi的话如果长的话就溢出,无法判断,最后是一个一个比较一下
      

  6.   

    我是用的 alexmayer 这种方式。
      

  7.   

    只能一个个取出来后用ASCI码判断!
      

  8.   

    bool isDigital = (sz.TrimLeft(_T("0123456789")).GetLength() == 0);
      

  9.   

    等高人,如何判断一下格式均为数字:123
    +334
    -23
    12.3
    +23.4
    -25.6
    2E-4
    2E+13
    2E34
    +2E-4
    -2E+13
    ……我的方法只能是定点整数,无符号。要想分辨如上的多种,恐怕只能正则。等高手来写这个正则。
      

  10.   

    如果是C#和Java版,人家肯定告诉你一个正则表达式,其实还是循环判断最快
      

  11.   

    看到此文,十分之"愤怒"  几年不来, VC++版块的问题越来越让人崩溃..  平时都把妹去了??  1. 除了一个个比,你还想干什么?  这问题如同: 上海到北京, 除了从上海出发 然后经过一些中间点,到北京外,有没有其它方式? 我靠 你想 瞬移?  你用那些鸟函数撒意思, 干脆写个很牛逼的函数,该函数将此问题自动编码发到 百度知道上, 然后AI自动解析 用户回答中的最正确答案,然后组成返回值,返回这个答案.我是往夸张的地方说的. 本质上是一样的.   2. 有人发这个:

    等高人,如何判断一下格式均为数字:123
    +334
    -23
    12.3
    ...
    "
      这种鸟问题 需要长的高的人吗? 150cm身高的人就解决不了了??? 这种格式的数字都是非常规范的数字.需要用得到正则表达式吗? 正则解析的效率和原理 你清楚吗? 以后杀鸡都要用导弹了. 这种非常规范的数字格式,到网上搜一下是否有人写好的库函数,如果没有,自己写一个 都是非常简单的事情. 首先判断+-符号,再一个个读数字,再判断E位置,小数点等等. 非常之简单.  就这点事情都懒的干,以后估计大家写代码之需要26*2个英文字母和()号了.  以后写程序的都是全 "方法控"了 , 没人再去写什么if for了. 反正CPU快,用户习惯了, 卡卡更健康,更能促进 "鸡滴屁".   再回头看看你们的鸟问题. 靠你们,中国有何希望?  无聊乱骂一通, 请直接无视.
      

  12.   

    说实话我也觉得那个CString的太没有考虑效率了...
      

  13.   

       说的过火了点.  实在是非常抱歉了. 
       这个行业越来越民工了. 以至于 现在是个民工 都慕名而来了.3,4K/m的工资,坛子里经常看到人说 好高 好羡慕  什么的. 听了让人对这社会绝望了.在大多数工作 都还是体力或文档或管理安排性质的情况下,计算机行业算是个知识密度非常高的一个行业,大家都是高级知识分子或者即将成为高级知识分子.努力用心去学习,用心去研究, 谁再给你提那些对不起自己辛苦的薪水,直接送他一句 FK Y.   "愤怒的有道理,不过我很菜,想看看如何用正则写?"
        to  ls. 看你也是5个裤衩的人了. 估计你的话 是故意 逗我的. 呵呵. 我说的过分了.对不起.正则算挺简单的东西吧,网上很多参考资料.  模式 能并一起并一起,不能并一起 用 | 分开 就OK了. 十来行 if else 能解决的问题,  字符串长度不大的时候, 动用正则 效率有点得不偿失.  当然如果只调用一次 也就很无所谓了. 但我想 写C\C++的人 一个很基本的 特征 就是他们时时刻刻都会在乎效率.
      

  14.   

    老老实实一个一个的去比较吧目前的CPU可没能力处理一次计算就处理一串的字符32位CPU的寄存器最多也只能存放32位的,就算64位的也只有...不要说函数,函数也是在函数体中进行处理了(别以为函数就是可以一下处理一串的数据和可以处理一串数据是不同概念呀)
      

  15.   

    百度进来的,这帖子发现各种方法.
    逐个比较确实是"效率"高的代码,但是还是更喜欢10楼的代码.
    有人说这样太浪费,不考虑效率,我要说一个项目,像这种浪费多了去了,你考虑的过来吗?也许你随便调用个不起眼的api,它实现的步骤"浪费"的超过你的想象,那怎么办?不用这个api?自己写?有空把Windows的全重写了吧.
    MS提供给我们的SDK,各种类,IDE,是为了便捷开发的(方便,快捷).现在嵌入式都不要求那么抠了,在Windows下,有那么强大的处理器和内存,却把它当成C51来编程,不觉得很委屈自己么?