C++中int或double与string的相互转换

一、int转string

1.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);

to_string这个函数可以把很多数类型变成string类型,很强大

下面来看一个例子

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

int main()
{
    double pi = 3.14;
    string s1 = "pi=" + to_string(pi);

    string s2 = to_string(1 + 2 + 4 + 7 + 14) + " is the sum";
    cout << s1 << endl;
    cout << s2 << endl;
    return 0;
}

运行结果:
这里写图片描述
二、借助字符串流:

标准库定义了三种类型字符串流:istringstream,ostringstream,stringstream

这几种类型和iostream中的几个非常类似,分别可以读、写、读和写string类型,它们也确实是从iostream类型派生而来的。

要使用它们需要包含sstream头文件

#include<iostream>
#include<string>
#include <sstream>
using namespace std;
//将int型的i变成string类型
int main()
{
    ostringstream myos;         //构造一个输出字符串流,流内容为空 
    int i = 12;
    myos << i;                  //向输出字符串流中输出int整数i的内容
    string s = myos.str();      //利用字符串流的str函数获取流中的内容 
    cout << s + " is the result" << endl;
}

运行结果:
这里写图片描述

二、string转int

1、可以使用std::stoi/stol/stoll等等函数

stoi(字符串,起始位置,2~32进制),将n进制的字符串转化为十进制。

例子:

// stoi example
#include <iostream>
#include <string>     // std::string, std::stoi
using namespace std;

int main()
{
    string str_dec = "2001, A Space Odyssey";
    string str_hex = "40c3";
    string str_bin = "-10010110001";
    string str_auto = "0x7f";

    string::size_type sz;   // alias of size_t

    int i_dec = stoi(str_dec, &sz);
    int i_hex = stoi(str_hex, nullptr, 16);
    int i_bin = stoi(str_bin, nullptr, 2);
    int i_auto = stoi(str_auto, nullptr, 0);

    cout << str_dec << ": " << i_dec << " and [" << str_dec.substr(sz) << "]\n";
    cout << str_hex << ": " << i_hex << '\n';
    cout << str_bin << ": " << i_bin << '\n';
    cout << str_auto << ": " << i_auto << '\n';
    return 0;
}

这里写图片描述

2、采用标准库中atoi函数,对于其他类型也都有相应的标准库函数,比如浮点型atof(),long型atol()等等

#include <iostream>
using namespace std;

int main()
{
    string s = "12";
    int a = atoi(s.c_str());
    cout <<"int a="<< a<<endl;
}

3、采用sstream头文件中定义的字符串流对象来实现转换。

istringstream is("12"); //构造输入字符串流,流的内容初始化为“12”的字符串 
int i;
is >> i;                //从is流中读入一个int整数存入i中

参考资料:
https://blog.csdn.net/u010510020/article/details/73799996
http://blog.csdn.net/chavo0/article/details/51038397
http://blog.csdn.net/na_beginning/article/details/53576123

猜你喜欢

转载自blog.csdn.net/happyjacob/article/details/81211713