我有一个程序需要从 char* 数据里面得到后几位(后3位)数字。可我不知如何解决。因为情况分的比较多。有E06、E-05 (科学计数法),还有正负数之分。例:如0.0000056 、0.0000036  我如何得到56、36这个后几位数?又如4.568323E08 如何得到323这个数字呢?
又如-3.2658954E09 如何得到954这个数字呢?
又如-1.123154545E-09 如何得到554这个数字呢?
拜托各位大侠了!这个问题已经困扰我1个月了。谢谢大侠了!!!!!!!

解决方案 »

  1.   

    #include <iostream>
    #include <cstring>
    using namespace std;const char* get3(char* dest, const char* src)
    {
        char *p = strchr(src, 'E');
        if(NULL == p)
        {
            dest[0] = '\0';
            return NULL;
        }   
        else 
        {
            strncpy(dest, p - 3, 3);
            dest[3] = '\0';
            return dest;
        }
    }int main()
    {
        char buf[4];
        
        //可以这样
        get3(buf, "-3.2658954E09");
        cout << buf << endl;    //也可以这样
        cout << get3(buf, "4.568323E08") << endl;
        cout << get3(buf, "-1.123154545E-09") << endl;    return 0;
    }
      

  2.   

    呵呵,改一下
    #include <iostream>
    #include <cstring>
    using namespace std;const char* get3(char* dest, const char* src)
    {
      char *p = strrchr(src, 'E');
        if(NULL == p)
        {
            strncpy(dest, src + strlen(src) - 3, 3);   
        }   
        else 
        {
            strncpy(dest, p - 3, 3);
         }
        dest[3] = '\0';
        return dest;}int main()
    {
        char buf[4];
        
        //可以这样
        get3(buf, "-3.2658954E09");
        cout << buf << endl;    //也可以这样
        cout << get3(buf, "4.568323E08") << endl;
        cout << get3(buf, "-1.123154545E-09") << endl;    return 0;
    }
      

  3.   

    用CString类这些问题都能解决啊
      

  4.   

    楼上的显然比较麻烦,用MFC多好
    CString GetLast3Char(CString str)
    {
        int position=0;
        if (!(position=str.Find('E')))
           return str.Right(3);
        else 
           return str.Mid(position-3,3);
    }int main()
    {
        CString str1="0.0000056";
        CString str2="1.123154545E-09";
        CString strResult1,strResult2;
        strResult1=GetLast3Char(str1);
        strResult2=GetLast3Char(str2);
        cout <<strResult1<<strResult2<<endl;
    }
      

  5.   

    我喜欢用boost库,虽然看上去有点繁,但功能是无比强大的
    #include <boost\regex.hpp>
    #include <string>
    #include <iostream>
    using namespace std;
    using namespace boost;string get3(const char *s)
    {
      cmatch  what;
      regex H1("\\d{3}(?=E)");
      regex_search(s,what,H1);
      return what[0].str();  
    }   void main()
    {
    cout << get3("4.568323E08") <<endl;
    cout << get3("-3.2658954E09") <<endl;
    cout << get3("-1.123154545E-09") <<endl;
    }
    ---------------------------------------
    结果:
    323
    954
    545