c语言string类型转为double类型

来源:互联网 发布:强制开启光猫23的端口 编辑:程序博客网 时间:2024/05/16 16:32
#include <iostream>
#include 
<string>
#include 
<stdlib.h>
#include 
<math.h>

using namespace std;

bool stringready(string str)
{
    
int i=0;
    
if((unsigned)(str.at(i))==45)
        i
++;
    
for(;i<str.length();i++)
    
{
        unsigned one
=(unsigned)(str.at(i));
        
if(one>=48&&one<=57||one==46)
            ;
        
else
            
return 0;
    }

    
return 1;
}


double stringtodouble(string str)
{
    
int i=0,sign;
    
double integer=0;
    
double decimal=0;
    
int dot=str.length();
    
if((unsigned)(str.at(i))==45)
    
{
        sign
=-1;
        i
++;
    }

    
else 
        sign
=1;
    
    
for(;i<str.length();i++)
    
{
        unsigned one
=(unsigned)(str.at(i));
        
if(one>=48&&one<=57)
            
if(i<dot)
                integer
=(one-48)+integer*10;
            
else
                
decimal=decimal+(one-48)/pow(10,i-dot);
        
else
            
if(one==46)
                dot
=i;
    }

    
return sign*(integer+decimal);
}


void main()
{
    
string str1="-123.45";
    
if(stringready(str1))
        cout
<<stringtodouble(str1);
}