zoukankan      html  css  js  c++  java
  • C++ 中 string, char*, int 类型的相互转换

    一、int

    1、int 转换成 string

      1) to_string函数 —— c++11标准增加了全局函数std::to_string:

    string to_string (int val);
    string to_string (long val);
    string to_string (long long val);
    string to_string (unsigned val);
    string to_string (unsigned long val);
    string to_string (unsigned long long val);
    string to_string (float val);
    string to_string (double val);
    string to_string (long double val);
    

      2) 借助字符串流

    标准库定义了三种类型字符串流:istringstream,ostringstream,stringstream,看名字就知道这几种类型和iostream中的几个非常类似,分别可以读、写以及读和写string类型,它们也确实是从iostream类型派生而来的。要使用它们需要包含sstream头文件。

    除了从iostream继承来的操作

    1.sstream类型定义了一个有string形参的构造函数,即:  stringstream stream(s); 创建了存储s副本的stringstream对象,s为string类型对象

    2.定义了名为str的成员,用来读取或设置stringstream对象所操纵的string值:stream.str(); 返回stream中存储的string类型对象stream.str(s); 将string类型的s复制给stream,返回void

    Example:

    1 int aa = 30;
    2 stringstream ss;
    3 ss<<aa; 
    4 string s1 = ss.str();
    5 cout<<s1<<endl; // 30

    二、string

    1.string到int的转换

      1) 在 C 标准库里面,使用 atoi:

    #include <cstdlib> 
    #include <string>
    
    std::string text = "152"; 
    int number = std::atoi( text.c_str() ); 
    if (errno == ERANGE) //可能是std::errno 
    { 
     //number可能由于过大或过小而不能完全存储 
    } 
    else if (errno == ????) 
    //可能是EINVAL 
    { 
     //不能转换成一个数字 
    }

      2) 在C++标准库里面,使用stringstream:(stringstream 可以用于各种数据类型之间的转换)

    #include <sstream> 
    #include <string>
    
    std::string text = "152"; 
    int number; 
    std::stringstream ss;
    
    
    ss << text;//可以是其他数据类型
    ss >> number; //string -> int
    if (! ss.good()) 
    { 
    //错误发生 
    }
    
    ss << number;// int->string
    string str = ss.str(); 
    if (! ss.good()) 
    { 
     //错误发生 
    }

      3) 在Boost库里面,使用lexical_cast:

    #include <boost/lexical_cast.hpp> 
    #include <string>
    
    try 
    { 
     std::string text = "152"; 
     int number = boost::lexical_cast< int >( text ); 
    } 
    catch( const boost::bad_lexical_cast & ) 
    { 
     //转换失败 
    }                      

    2. string 转 CString

    (1)  data(),返回没有”“的字符串数组
    (2)  c_str(),返回有”“的字符串数组
    (3)  copy()
    CString.format(”%s”, string.c_str());

       用c_str()确实比data()要好;

    3.string 转 char *

    char *p = string.c_str();

    三、char*

    1.char* 转 CString

    CString.format(”%s”, char*);

    2.char* 转 string

    string s(char *);

      只能初始化,在不是初始化的地方最好还是用assign().

    3、用 atof() 函数可以把字符串型 char* 转浮点数型 float

    函数原型:double atof(const char *nptr); 

    函数说明:atof() 会扫描参数 nptr 字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('')才结束转换,并将结果返回。参数nptr字符串可包含正负号、小数点或E(e)来表示指数部分,如123.456或123e-2。返回值返回转换后的浮点型数。

    Example:

    /* 将字符串a 与字符串b转换成数字后相加*/
    #include<stdlib.h>
    main()
    {
      char *a=”-100.23”;
      char *b=”200e-2”;
      float c;
      c=atof(a)+atof(b);
      printf(“c=%.2f
    ”,c);
    }

    四、Cstring

    1.CString 转 string

    string s(CString.GetBuffer());

      GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间。

    2.CString与int、char*、char[100]之间的转换

      (1) CString互转int

      将字符转换为整数,可以使用atoi、_atoi64或atol。而将数字转换为CString变量,可以使用CString的Format函数。如

    CString s;
    int i = 64;
    s.Format(”%d”, i)

      Format函数的功能很强,值得你研究一下。

    void CStrDlg::OnButton1()
    {
       CString
       ss=”1212.12″;
       int temp=atoi(ss);
       CString aa;
       aa.Format(”%d”,temp);
       AfxMessageBox(”var is ” + aa);
    }

      (2) CString互转char*

    ///char * TO cstring
    CString strtest;
    char * charpoint;
    charpoint=”give string a value”; //?
    strtest=charpoint;
    ///cstring TO char *
    charpoint=strtest.GetBuffer(strtest.GetLength());

      (3) 标准C里没有string,char *==char []==string, 可以用CString.Format(”%s”,char *)这个方法来将char *转成CString。
          要把CString转成char *,用操作符(LPCSTR)CString就可以了。
          CString转换 char[100]

    char a[100];
    CString str(”aaaaaa”);
    strncpy(a,(LPCTSTR)str,sizeof(a));

    参考博客:1)C++ 中int,char,string,CString类型转换(一)

         2)C语言中string char int类型转换

         3)string, char*, int类型转换 , c++强制转化

         4)C++中int型与string型互相转换

  • 相关阅读:
    dubbo入门(一)
    java中文件操作《一》
    Unity 游戏框架搭建 2019 (七) 自定义快捷键
    凉鞋:我所理解的框架 【Unity 游戏框架搭建】
    Unity 游戏框架搭建 2019 (六) MenuItem 复用
    Unity 游戏框架搭建 2019 (五) 打开所在文件夹
    Unity 游戏框架搭建 2019 (四) 导出 UnityPackage
    Unity 游戏框架搭建 2019 (三) 生成文件名到剪切板
    Unity 游戏框架搭建 2019 (二) 文本复制到剪切板
    Unity 游戏框架搭建 2019 (一) 简介与第一个示例文件名的生成
  • 原文地址:https://www.cnblogs.com/sylar5/p/6638641.html
Copyright © 2011-2022 走看看