请问下那位知道VC里面的什么字符转换方法支持错误的检查,比如1.1可以转,A1.1或者1.1A这样的错误格式不能转或者抛出异常,目前试过了wtoi,swscanf都不行,能转换但是不能告诉我格式不合要求

解决方案 »

  1.   

    比较笨的方法:
    BOOL IsNumeric(CString strData,BOOL bIsFloat)
    {
    int iDots = 0;
    int iNegatives = 0; strData.TrimRight();
    strData.TrimLeft(); for(int i = 0;i < strData.GetLength();i++)
    {
    if(strData.GetAt(i) == '-') 
    {
    iNegatives ++;
    continue;
    }
    if(strData.GetAt(i) == '.')
    {
    if(bIsFloat == FALSE) return FALSE;

    iDots++;
    if(iDots >= 2) return FALSE; continue;
    }
    if((strData.GetAt(i)<'0')||(strData.GetAt(i)>'9'))
    return FALSE;
    }
    if(iNegatives >= 2) return FALSE;
    return TRUE;
    }
      

  2.   

    貌似没有,自己写个函数,CString中有一个函数:SpanExcluding  它能提取字符串中不包含你指定的字符,执行它之后判断该操作什么就是了。CString str="A0.1";CString tem=str.SpanExcluding("0123456789.");
    if(tem==""){
      atoi(str);
    ..........
    }
      

  3.   

    其实你说的这些函数都支持错误检测,调用之后看一下errno就是了。
      

  4.   

    先检测格式,有没有其他字符什么的,然后在转换。或者直接分离2边的字符
    char* str = "A1.1";
    char temp1[20];
    char temp2[20];
    int a;
    int b;
    sscanf(str, "%[^0-9]%d.%d%[^0-9]", temp1, &a, &b, temp2); int i = 10;
    while (b / i)
    {
    i *= 10;
    } float c = a + (float)b / i;
      

  5.   

    介绍你两个函数 问题就应该能解决CString::SpanIncludingCString SpanIncluding( LPCTSTR lpszCharSet ) const;
      throw( CMemoryException );
    /*
    返回值:
    返回此字符串中的一个子字符串,该子串中的字符也在lpszCharSet字符集中字符集中。该子串开始于字符串中的第一个字符,当发现第一个不是lpszCharSet字符集中的字符时结束。如果字符串中的第一个字符就不是指定字符集中的字符,则SpanIncluding返回一个空的子字符串。参数: lpszCharSet 一个被解释为字符集的字符串。  说明:
    此成员函数用来从字符串中提取字符,提取的子字符串开始于字符串中的第一个字符,其字符都是由lpszCharSet指定的字符集中的。如果字符串的第一个字符就不在此字符集中,则SpanIncluding返回一个空的字符串。否则,它返回一个连续字符序列,它们都是该字符集中的字符。示例:
    下面的例子说明了如何使用CString::SpanIncluding。
    */
    // CString::SpanIncluding示例:
    CString str( "cabbage" );
    CString res = str.SpanIncluding( "abc" );
    ASSERT( res == "cabba" );
    res = str.SpanIncluding( "xyz" );
    ASSERT( res.IsEmpty( ) );
    ////////////////////////////////////////////////////////////////////////////////////
    CString::SpanExcludingCString SpanExcluding( LPCTSTR lpszCharSet ) const;
      throw( CMemoryException );
    /*  说明部分
    返回值:
    返回一个子字符串,该子串保存了在CString字符串中但又不在lpszCharSet字符集合中的字符,该子串以字符串的第一个字符作为开始,以在此字符串中发现的第一个也在lpszCharSet字符集中字符前面的字符作为结尾(也就是说,从此字符串的第一个字符开始,直到第一个也包括在lpszCharSet字符集的字符为止,但不包括这个也在lpszCharSet字符集中的字符)。如果CString中的每一个字符都不在lpszCharSet字符集合中,则返回整个字符串。参数: lpszCharSet 一个被解释为字符集的字符串。  说明:
    此成员函数用来查找整个CString对象中的字符串,找出lpszCharSet指定的字符集中任何字符第一次出现的位置。SpanExcluding提取并返回这个lpszCharSet字符集中的字符第一次出现之前的所有字符(换句话说,来自lpszCharSet字符集的字符以及在它之后的字符串都不会被返回)。如果在此字符串中没有发现来自lpszCharSet字符集的字符,则SpanExcluding返回整个字符串。示例:
    下面的函数返回src参数的第一个部分。
    */
    // 由一个分号(;),一个逗号( , ),一个句号( . ),一个破折号( - ),
    // 或一个冒号( : )划定界线的部分。
    CString GetFirstPart( CString src)
    {
      return src.SpanExcluding( ";,.- :");
    }用这两个函数测试一下 发现有分数字字符 可以自己学个抛出异常 没有异常就用watoi,_atoi,atoi,_ttoi等等自己查个合适的 转换函数