平時在刷題的時候總是會遇到數字與字串怎么轉換的問題,我們要是用一般的方法,
字串變成數字的常規套路
秦九昭演算法
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的用法
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/264573.html
標籤:其他
上一篇:現下流行的APP產品簡易分析
下一篇:Caddi Programming Contest 2021(AtCoder Beginner Contest 193)-C - Unexpressed-題解
