字符串转浮点数、字符串转整数、数转字符串

一、字符串转浮点数

double StrToDouble(const char *s)
{
	
	if (s == nullptr)
	{
		printf("输入字符串为空");
		exit(-1);
		
	}
	int i = 0;
	int k = 0;
	double j;
	int flag =1;
	double result = 0.0;
	while (s[i] == ' ')
	{
		i++;
	}
	if (s[i] == '+')
	{
		i++;
	}
	if (s[i] == '-')
	{
		i++;
		flag = -1;
	}
	while (s[i] != '\0' && s[i] != '.')
	{
		if (s[i] < '0' || s[i] > '9')
		{
			printf("字串含有非数字字符,无法转换!\n");
			exit(-1);
		}
		j = (s[i] - '0')*1.0;
		result = result * 10 + j;
         if((result>0x7FFFFFFF)
       {
       exit(-1);
     
      }
		i++;
	}
	if (s[i] == '.')
	{
		i++;
		while (s[i] != '\0')
		{
			if (s[i] < '0' || s[i] > '9')
			{
				printf("字串含有非数字字符,无法转换!\n");
				exit(0);
			}
			k++;
			j = s[i] - '0';

			result = result + (1.0 * j) / pow(10.0, k);    //编译时候此处有警告


			i++;
		}
	}
	result = flag * result;
	return result;
}

二、字符串转整数

enum Status{kValid=0,kInvalid};
int g_nStatus=kValid;

int StrToInt(const char* str)
{
  g_nStatus=kInvalid;
  long long num=0;
  
  if(str!=nullptr&&*str!='\0')
  {
    bool minus=false;
    if(*str=='+')
       str++;
    
    else if
    {
      str++;
      minus=true;
    }
  
   if(*str!='\0')
   {
     num=StrToIntCore(str,minus);
   }
}
return (int)num;
}

long long StrToIntCore(const char* digit,boolminus)
{
   long long num=0;
   
while(*digit!='\0')
 {
    if(*digit>='0'&&*digit<='9')
   {
     int flag=minus?-1:1;
     num=num*10+flag*(*digit-'0');

     if((!minus&&num>0x7FFFFFFF)||(minus&&num<(signed int)0x80000000)
     {
       num=0;
       break;
     
   }
digit++;
}

else
{
   num=0;
break;
}

if(*digit=='\0')
{
  g_nStatus=kValid;
}

return num;
}

三、最好的方法,适合整数和浮点数


#include 
#include 
using namespace std;

//double转字符串
string doubletostr(double val)
{
	ostringstream oss;
	oss << val;
	return oss.str();

}

//字符串转double
double strtodouble(const string& str)
{
	istringstream iss(str);
	double val;
	iss >> val;
	return val;
}

int main()
{
	double val = 55.55;
	string str = doubletostr(val);
	//cout << str << endl;

	str = "-123.12345";
	val = strtodouble(str);
	cout << val << endl;
	return 0;
}

 

你可能感兴趣的:(字符串)