C++中不同类型数据之间的转换(不调用库函数)

来源:互联网 发布:无线网卡网络不稳定 编辑:程序博客网 时间:2024/06/05 20:08

刚毕业找工作时,老被考到这些数据类型转换题,所以总结一下比较好。

1.float型到string型的转化

   //#include "stdafx.h"
    #include "stdlib.h"
    #include "stdio.h"

   char *F2S(double d, char* str)
   {
       char str1[40];
       int j=0,k,i;
       i = (int)d;        //浮点数的整数部分
       while(i>0)       
       {
            str1[j++] = i%10+'0';  
         // printf("%c ",str1[j-1]);
            i /= 10;
       }
       for(k=0;k<j;k++)
       str[k] = str1[j-1-k];    //while循环完以后,各个位的数字是逆序存储在str1中的,所以需要逆转
       str[j++] = '.';
       d -= (int)d;       //浮点数的小数部分
       for(i=0;i<10;i++)
       {
            d *= 10;
         // printf("%d ",j);
           str[j++] = (int)d+'0';  
        // printf("%c\n",str[j-1]);
           d -= (int)d;
       }
    // printf("%d  ",j);

    // printf("%c***\n",str[j-1]);
    // str[j] = '\0';
       if(str[--j]=='0')

       {      
            str[++j] = '\0';
        //  printf("%d  ",j);
        //  printf("%c\n",str[j-1]);
       }
       return str;
}


int main(int argc, char* argv[])
{
      double d = 365.897003120000;
      char str[20];
      char *p = F2S(d, str);
      printf("%s\n",str);
      printf("%s\n",p);
      return 0;
}

 

2.string类型到double类型的转换

#include <iostream>
#include <string>
using namespace std;

double S2D(string s){
    double res=0;
    int flag=0,xs=0,ws=0;
    int jc=1;
    for(int i=0;i<s.size();i++){ 
        if(s[i]=='.'){                //以“.”作为整数部分和小数部分的分界符
            flag=1;                  //在“.”之前即整数部分时,flag值一直是0,之道遇到“.”之后,即到了小数部分,flag值变为1
            continue; 
        }   
        if(flag==0){ 
            res*=10; 
            res+=s[i]-'0';        //得到整数部分
        }  
        else{   
            ws++;                 //统计小数部分的位数
            xs*=10;
            xs+=s[i]-'0';
        }  
    }  
    for(int j=0;j<ws;j++){
        jc*=10;        
    }  
    res+=xs*1.0/jc;            //xs*1.0/jc会得到小数部分  

    return res;
}

int main (){
    string s="56.93";
    double d=S2D(s);
    cout<<d<<endl;
    return 0;

}

 

其他几种类型之间的转换会在后续补全。

原创粉丝点击