一个CString字符串,如何判断他是一个数字,
比如2或1.34
而不是sad或s12等

解决方案 »

  1.   

    最笨的方法: 检查ASCII码。
      

  2.   

    char c;
    for(int i= 0;i<str.GetLength();i++)
    {
            c = str.GetAt(i);
            ......
    检查c是否是在‘0'到'9'之间或者是否等于'.'
      

  3.   

    写一个小函数,用来对每一个字符进行检查。
    比如:for(int i=0;i<str.GetLength();i++)
    {
        if((str.GetAt(i)<'0' || str.GetAt(i)>'9') && str.GetAt(i)!='.')
       {
            //出错
       }
    }
      

  4.   

    好象MFC里面有个 IsNumber() 
    你查查看看
      

  5.   

    像这类问题,最好使用正则表大式,正则表大式类在VC中没,在C#,JAVA中都有,但是VC中有开源你可下载一个看看
      

  6.   

    不好意思我是在一段程序中看到的 刚才的函数是这样实现的
    bool IsNumber( LPCTSTR pszText )
    {
    ASSERT_VALID_STRING( pszText ); for( int i = 0; i < lstrlen( pszText ); i++ )
    if( !_istdigit( pszText[ i ] ) )
    return false; return true;
    }
      

  7.   

    1 判断是否整数
    bool CDlgInfo::_isdigitstr(const char* str, int count)
    {
       if ( str == NULL || *str == '\0') 
       {
       return false;
       }
        int count1 = 0;
    int count2 = 0; while(isdigit( *str )||
       (*str)=='+'||
       (*str)=='-'||
       (*str)=='a'||
       (*str)=='A'||
       (*str)=='b'||
       (*str)=='B'||
       (*str)=='c'||
       (*str)=='C'||
       (*str)=='d'||
       (*str)=='D'||
       (*str)=='e'||
       (*str)=='E'||
       (*str)=='f'||
       (*str)=='F'||
       (*str)==',')
       {
       if ( (*str == '+')||
        (*str == '-') )    {
       count1 += 1;
       }    if (*str == ',')
       {
       count2 += 1;
       }    str++;
       }
       if ( (count1 > count)||
        (count2 > count-1) )
       {
       return false;
       }
       else
       {
       return (*str== '\0')?true:false;
       }
    }2 判断是否浮点数
    bool CDlgInfo::_isFloatstr(const char* str, int count)
    {
       if ( str == NULL || *str == '\0') 
       {
       return false;
       }   int count1 = 0;
       int count2 = 0;
       int count3 = 0;
       
       while( isdigit( *str )||
          (*str)=='+'||
          (*str)=='-'||
          (*str)=='.'||
      (*str)==',' )
       {
       if ( (*str)=='+'||(*str)=='-' )
       {
       count1 += 1;
       }
       if ( (*str)=='.' )
       {
       count2 += 1;
       }
       if ( (*str)==',' )
       {
       count3 += 1;
       }
       str++;
       }   if ( (count1 > count)||
        (count2 > count)||
        (count3 > count-1) )   {
       return false;
       }
       else
       {
        return (*str== '\0')?true:false;
       }
    }
      

  8.   

    char c;
    for(int i= 0;i<str.GetLength();i++)
    {
            c = str.GetAt(i);
            if(c>='0'&&c<='9'){//符合数字的条件}
            else MessageBox("发现非数字存在!","提示",MB_OK);
    }
      

  9.   

    this->UpdateData();
    CString str;
    int pos2; int pos=this->m_ptxtSFJE.FindOneOf("~!@#$%^&*()_+|`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-=\\{}[]:\";'<>?,/ ");
    if(pos!=-1)
    {
    this->m_ptxtSFJE.Delete(pos);
    str=this->m_ptxtSFJE;
    this->m_ptxtSFJE="";
    this->UpdateData(false);
    // this->m_ptxtEndNo.Replace(str);
    this->m_potxtSFJE.ReplaceSel(str);
    //m_ptxtEndNo
    } UpdateData();
    pos=m_ptxtSFJE.FindOneOf(".");
    if (pos!=-1)
    {
    pos2=m_ptxtSFJE.Find(".",pos+1);
    if (pos2!=-1)
    {
    this->m_ptxtSFJE.Delete(pos2);
    str=this->m_ptxtSFJE;
    this->m_ptxtSFJE="";
    this->UpdateData(false);
    // this->m_ptxtEndNo.Replace(str);
    this->m_potxtSFJE.ReplaceSel(str);
    }
    }
    UpdateData();
    pos=m_ptxtSFJE.FindOneOf(".");
    if (pos!=-1)
    {
    pos2=m_ptxtSFJE.Find(".",pos+1);
    if (pos2!=-1)
    {
    this->m_ptxtSFJE.Delete(pos2);
    str=this->m_ptxtSFJE;
    this->m_ptxtSFJE="";
    this->UpdateData(false);
    // this->m_ptxtEndNo.Replace(str);
    this->m_potxtSFJE.ReplaceSel(str);
    }
    }
    在一个CEdit的输入框的OnUpdate事件中输入这些代码绝对不会出现1.2.3的情况.吐血贡献了.呵呵!~
      

  10.   

    使用boost中的RegEx了 简单(正则表达式)#include <boost/regex.hpp>try
    {
    boost::wregex reg(L"\\d*.?\\d*");
    std::basic_string<wchar_t> str1=L"12.11";
    std::basic_string<wchar_t> str1=L"1.2.3";
    std::basic_string<wchar_t> result;
    int b=result=boost::regex_match(ss,reg);
                      printf("%s",b?"true":"false");
                      b=result=boost::regex_match(ss,reg);
                      printf("%s",b?"true":"false");

    }
    catch(boost::bad_expression e)
    {
    printf("%s",e.what());
    }
      

  11.   

    简单的办法,
    不知道行不行。
    1.先把cstring1 转化为 数字i(atof());
    2.再把数字i转化为cstring2,
    3.比较cstring1,cstring2的长度,若相等则是一个数字。