• 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型互相转换

  • 相关阅读:
    SQL 数据库中将某表中的一列数据拆分作为查询条件
    SQL数据库导入数据时提示未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序。 (System.Data)
    SQL常用内置函数
    SQL常用语句
    关于网页中鼠标双击文字选中设置
    SQL数据库查询列的类型及长度
    ASP. NET MVC项目 使用iTextSharp将网页代码生成PDF文件
    eslint-config-airbnb vs prettier vs standard
    windows批处理(bat脚本)
    python日志库loguru
  • 原文地址:https://www.cnblogs.com/sylar5/p/6638641.html
Copyright © 2020-2023  润新知