C++ 数字与字符串的相互转换的几种方法

平时在刷题的时候总是会遇到数字与字符串怎么转换的问题,我们要是用一般的方法。

字符串变成数字的常规套路
秦九昭算法
res=res*进制+每一位的数字(从高位向低位)

string a;
int res=0;
for(int i=0;i<a.length();i++)
res=res*10+a[i]-'0';

数字变字符串。
这是把数字19234变字符串的方法

#include<iostream>
#include<algorithm>

using namespace std;

int main(void)
{
    
    
	int s=19234;
	string a;
	while(s)
	{
    
    
		a+=s%10+'0';
		s/=10;
	}
	reverse(a.begin(),a.end() );
	cout<<a;
}

数字变成字符串的方法用到了reverse的函数,我觉得这样下来代码量也是很大,不值得去使用,我们有没有更简单的方法呢,是有的。

然后在寒假的前十天,我们学了一个网课,我们了解到了一个很好的一个解决办法,叫字符串流。

stringstream 这个变量名

然后这个在sstream的头文件当中,我们应该如何使用呢。

#include<iostream>
#include<algorithm>
#include<sstream>

using namespace std;

int main(void)
{
    
    
	string a="19235";
	int digit;
	stringstream ss;
	ss<<a;
	ss>>digit;
	cout<<digit;
}

在这里插入图片描述
注意事项
原字符串不能有空格,如果出现空格

#include<iostream>
#include<algorithm>
#include<sstream>

using namespace std;

int main(void)
{
    
    
	string a="192 35";
	int digit;
	stringstream ss;
	ss<<a;
	ss>>digit;
	cout<<digit;
}

在这里插入图片描述
我们做题的时候,可能会出现一些这样的情况
在这里插入图片描述
例题AcWing 1204. 错误票据
让你输入每行的数字,我们又不知道有多少个的时候。
我们可以用到这个stringstream

#include<iostream>
#include<algorithm>
#include<sstream>

using namespace std;

const int N=1e5+10,Inf=1e7;

int st[N];

int main(void)
{
    
    
        int i=0;
        int n;
        scanf("%d\n",&n);
        cout<<n<<endl;
        string a;
        while(getline(cin,a))
        {
    
    
        stringstream ss(a);
        i=0;
        while(ss>>st[i]) i++;
        for(int j=0;j<i;j++)
        printf("%4d ",st[j]);
        puts("");
        }
        
}


在这里插入图片描述
我们可以观察到每一个数都输出来了,然后我们怎么使用呢。

一、预处理,我们要用到sstream的头文件。

#include<sstream>

二、初始化

stringstream ss;

如果是这种形式的话

stringstream ss(a);

等同于

stringstream ss;
ss<<a;

这是两种初始化的方法。
三、

int digit;
double digi;
float dig;

选择你要变换数字的类型。

ss>>digit;
ss>>digi;
ss>>dig;

实现转化,我们在这个时候先说一下,ss>>digit转换的时候,如果不成功会返回0.
于是我们可以实现这样的过程。

while(ss>>digit[i]) i++;
把ss保存的多个数保存在digit数组里

这样就是我们需要学会的stringstream的用法。

持续更新本文种~~,下一步介绍sscanf的用法以及ssprintf的用法

猜你喜欢

转载自blog.csdn.net/qq_52358098/article/details/114166389