C++ int与string的相互转换(含源码实现)
一、int转换成string
Ⅰ、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);
Example:
// to_string example
#include <iostream> // std::cout
#include <string> // std::string, std::to_string int main ()
{
std::string pi = "pi is " + std::to_string(3.1415926);
std::string perfect = std::to_string(++++) + " is a perfect number";
std::cout << pi << '\n';
std::cout << perfect << '\n';
return ;
}
Output
pi is 3.141593
is a perfect number
附:to_string()函数的实现
//实现to_string函数
#include<iostream>
#include<string>
using namespace std;
#define max 100
string to_String(int n)
{
int m = n;
char s[max];
char ss[max];
int i=,j=;
if (n < )// 处理负数
{
m = - m;
j = ;
ss[] = '-';
}
while (m>)
{
s[i++] = m % + '';
m /= ;
}
s[i] = '\0';
i = i - ;
while (i >= )
{
ss[j++] = s[i--];
}
ss[j] = '\0';
return ss;
} int main()
{
cout << "请输入整数:";
int m;
cin >> m;
string s = to_String(m) + "abc";
cout << s << endl;
system("pause");
return ;
}
Ⅱ、借助字符串流
标准库定义了三种类型字符串流: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:
int aa = ;
stringstream ss;
ss<<aa;
string s1 = ss.str();
cout<<s1<<endl; //
二、string转换成int
Ⅰ、采用标准库中atoi函数,对于其他类型也都有相应的标准库函数,比如浮点型atof(),long型atol()等等
Example:
std::string str = "";
int n = atoi(str.c_str());
cout<<n; //
附:atoi()函数的源码实现
这个函数的主要功能是将一个字符串转化为一个数字,可能第一眼看上去,你会觉得这是一个很简单的函数,甚至是一个不需要多少行代码就可以实现的函数。其实这是一个看着很简单,但是实践起来还有些需要注意的地方。总的来说,有以下5种情况:
1--指针为NULL
2--空字符处理
3--正号与负号的处理
4--溢出处理
5--如果遇到异常字符怎么处理
下面附上代码:
#include<iostream>
enum ret { kvalid=,kinvalid }; // 是否有非法输入的标记
int status = kvalid;
long long Strtointcode(const char* digit, bool minus)
{
long long num = ;
while (*digit != '\0')
{
if (*digit >= ''&&*digit <= '')
{
int flag = minus ? - : ;
num = num * + flag*(*digit - '');
if ((!minus&&num > 0x7FFFFFFF) ||( minus&&num < (signed int)0x80000000))
{
num = ;
break;
}
digit++;
}
else
{
num = ;
break;
}
}
if (*digit == '\0')
status = kvalid;
return num;
}
int Strtoint(const char* str)
{
status = kinvalid;
long long num = ;
if (str != NULL&&*str != '\0')
{
bool minus = false;
if (*str == '+')
str++;
else if (*str == '-')
{
str++;
minus = true;
}
if (*str != '\0')
num = Strtointcode(str, minus); }
return (int)num;
} int main()
{
char arr[];
int ret = ;
printf("请输入您要转化的字符串:\n");
scanf("%s", arr);
ret = Strtoint(arr);
if (kvalid == status)
{
printf("%d\n", ret);
}
else
{
printf("输入非法\n");
printf("%d\n", ret);
}
system("pause");
return ;
}
Ⅱ、采用sstream头文件中定义的字符串流对象来实现转换
istringstream is(""); //构造输入字符串流,流的内容初始化为“12”的字符串
int i;
is >> i; //从is流中读入一个int整数存入i中
参考资料:
http://blog.csdn.net/loving_forever_/article/details/51285703
http://blog.csdn.net/lxj434368832/article/details/78874108
https://www.cnblogs.com/aminxu/p/4704281.html
C++ int与string的相互转换(含源码实现)的更多相关文章
- C++ JsonCpp 使用(含源码下载)
C++ JsonCpp 使用(含源码下载) 前言 JSON是一个轻量级的数据定义格式,比起XML易学易用,而扩展功能不比XML差多少,用之进行数据交换是一个很好的选择JSON的全称为:JavaScri ...
- String类的源码分析
之前面试的时候被问到有没有看过String类的源码,楼主当时就慌了,回来赶紧补一课. 1.构造器(构造方法) String类提供了很多不同的构造器,分别对应了不同的字符串初始化方法,此处从源码中摘录如 ...
- JDK中String类的源码分析(二)
1.startsWith(String prefix, int toffset)方法 包括startsWith(*),endsWith(*)方法,都是调用上述一个方法 public boolean s ...
- 微信公众平台开发-OAuth2.0网页授权(含源码)
微信公众平台开发-OAuth2.0网页授权接口.网页授权接口详解(含源码)作者: 孟祥磊-<微信公众平台开发实例教程> 在微信开发的高级应用中,几乎都会使用到该接口,因为通过该接口,可以获 ...
- 微信公众平台开发-access_token获取及应用(含源码)
微信公众平台开发-access_token获取及应用(含源码)作者: 孟祥磊-<微信公众平台开发实例教程> 很多系统中都有access_token参数,对于微信公众平台的access_to ...
- 微信公众平台开发-微信服务器IP接口实例(含源码)
微信公众平台开发-access_token获取及应用(含源码)作者: 孟祥磊-<微信公众平台开发实例教程> 学习了access_token的获取及应用后,正式的使用access_token ...
- jQuery使用():Deferred有状态的回调列表(含源码)
deferred的功能及其使用 deferred的实现原理及模拟源码 一.deferred的功能及其使用 deferred的底层是基于callbacks实现的,建议再熟悉callbacks的内部机制前 ...
- 百度智能手环方案开源(含源码,原理图,APP,通信协议等)
分享一个百度智能手环开源项目的设计方案资料. 项目简介 百度云智能手环的开源方案是基于Apache2.0开源协议,开源内容包括硬件设计文档,原理图.ROM.通讯协议在内的全套方案,同时开放APP和云服 ...
- Delphi:程序自己删除自己,适用于任何windows版本(含源码)
Delphi:程序自己删除自己,适用于任何windows版本(含源码) function Suicide: Boolean; var sei: TSHELLEXECUTEINFO; szMod ...
随机推荐
- unity2018的坑点
发布后有的电脑无法运行exe程序(反正我的电脑不行) 删除发布出来的一个叫UnityCrashHandler64.exe即可运行
- MySql的运算符
数据库中的表结构确立后,表中的数据代表的意义就已经确定.而通过MySQL运算符进行运算,就可以获取到表结构以外的另一种数据.例如,学生表中存在一个birth字段,这个字段表示学生的出生年份.而运用My ...
- 通过IntelliJ IDEA忽略掉不需要提交到github的文件
现如今,开源项目越来越多,存储容器主要有github,国内的码云.开源贡献也是衡量一个开发者是否具有足够的包容能力.技术能力的重要标准. 有些开发者没注意到这些,好心提交开源项目,配置文件也提交上去, ...
- Python-常用模块及简单的案列
1.模块 函数的优点之一,就是可以使用函数将代码块与主程序分离,通过给函数指定一个描述性的名称,并将函数存储在被称为模块的独立文件中,再将模块导入主程序中,通过import语句允许在当前运行的程序 ...
- bzoj 5252: [2018多省省队联测]林克卡特树
Description 小L 最近沉迷于塞尔达传说:荒野之息(The Legend of Zelda: Breath of The Wild)无法自拔,他尤其喜欢游戏中的迷你挑战. 游戏中有一个叫做& ...
- 【httpwatch】httpwatch对测试的应用
HttpWatch是一款网页数据分析工具,是浏览器插件,集成在IE浏览器的工具栏中.主要可以用来帮忙我们查看及分析HTTP请求的:Cookie.请求参数.请求头信息.响应头信息.响应状态.响应正文等内 ...
- Centos 从零开始 (二)
因为我是搞 nodejs的 所以以后会安装一些依赖于node的 比如mongodb数据库等. 6:安装nodejs 安装的时候遇到个小问题.yum install nodejs 报错 说没有这个包.然 ...
- Struts2 学习(二)
一.Struts2 配置文件 1.配置多个配置文件 在大部分应用里,随着应用规模的增加,系统中Action的数量也会大量增加,导致struts.xml配置文件变得非常臃肿. 为了避免struts.xm ...
- IntelliJ IDEA常用配置
1:IDEA同时打开多个项目: 选择菜单File–Setting-General--->右侧Project Opening选择第一个Open project in new window: 接下来 ...
- java 从Excel 输出和输入
本文实现了使用java 从数据库中获得对象,并存入集合中, 然后输出到Excel,并设置样式 package com.webwork; import java.io.File; import java ...