在c++程序中,有时候会涉及到string类型和int类型的相互转换
1、string 转int
1.1、方法1
使用c标准库
#include <stdlib.h>
long int strtol(const char *nptr, char **endptr, int base);
示例代码:
#include <iostream>
#include <cstdlib>
#include <string>
int main()
{
std::string text{"123"};
errno = 0; // pre set to 0
int number = (int)std::strtol(text.c_str(), nullptr, 10);
if (errno == ERANGE) {
// the number is too big/small
// number = (int)LONG_MAX or (int)LONG_MIN
std::cerr << "Too big or small: " << errno << "\n";
return 1;
} else if (errno) {
// maybe EINVAL, E2BIG or EDOM
// unable to convert to a number
std::cerr << "ERROR: " << errno << "\n";
return 1;
}
// TODO: you need to check whether the long to int overflow too if neccessary
std::cout << number << "\n";
return 0;
}
这种c语言风格的,还可以利用一个atoi函数,以下是一份示例代码:
#include <iostream>
#include <string>
using namespace std;
int main()
{
int x;
string str = "-10";
string str1 = "-10a";
string str2 = "a10";
x = atoi(str.c_str());
cout << x << endl;
x = atoi(str1.c_str()); //atoi()函数遇到字母时会自动停下
cout << x << endl;
x = atoi(str2.c_str()); //atoi()函数没有数字的话,定义为0
cout << x << endl;
return 0;
}
1.2、方法2,使用stringstream
#include <iostream>
#include <sstream> //引用stringstream的头文件
#include <string>
using namespace std;
int main()
{
int x;
string str = "-10";
string str1 = "10";
stringstream ss;
ss << str;
ss >> x;
cout << x << endl;
ss.clear(); //多次使用stringstream时,这段程序不能省略!
ss << str1;
ss >> x;
cout << x << endl;
}
Tips:由于stringstream不会主动释放内存,在多次使用stringstream时,会造成不必要的内存浪费,可使用ss.str(""),清空其占用的内存
1.3、方法三、使用std::stoi
这个标准库是从C++11开始才有的
示例代码如下:
#include <iostream>
#include <string>
using namespace std;
int main()
{
int x;
string str = "-10";
string str1 = "-10a";
string str2 = "a10";
x = stoi(str);
cout << x << endl;
x = stoi(str1); //stoi()函数遇到字母时会自动停下
cout << x << endl;
//x = stoi(str2); //stoi()函数没有数字的话,程序虽然可以编译,但运行时会出错
//cout << x << endl;
return 0;
}
1.4、使用at()函数定位,先转为字符型,然后再转为int类型
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str = "a1b2c3";
int i = str.at(1) - '0';
cout << i << endl;
return 0;
}
2、将int类型转换成string类型
2.1、方法一
这个代码是c语言风格的
#include <stdio.h>
int snprintf(char *str, size_t size, const char *format, ...);
The functions snprintf() and vsnprintf() write at most size bytes (including the terminating null byte ('\0')) to str.
#include <cstdio>
#define MAX_BUFFER_SIZE 128
int main()
{
int number = 123;
char out_string [MAX_BUFFER_SIZE];
snprintf(out_string, MAX_BUFFER_SIZE, "%d", number);
printf("out_string = \"%s\"\n", out_string);
return 0;
}
2.2、方法二,使用stringstream
#include <sstream>
#include <iostream>
int main()
{
int i = 123;
std::stringstream ss;
ss << i;
std::string out_string = ss.str();
std::cout << out_string << "\n";
return 0;
}
方法三、使用标准库std::to_string()
自C++11起后可用
#include <iostream>
#include <string>
int main ()
{
int n = 123;
std::string str = std::to_string(n);
std::cout << n << " ==> " << str << std::endl;
return 0;
}