C/C++實(shí)現(xiàn)數(shù)字與字符串互相轉(zhuǎn)換的多種方法
前言:
在C/C++程序中,會(huì)需要把數(shù)字與字符串做出互相轉(zhuǎn)換的操作,用于實(shí)現(xiàn)程序想要的效果。下面將介紹多種方法實(shí)現(xiàn)數(shù)字與字符串互相轉(zhuǎn)換。
字符串轉(zhuǎn)為數(shù)字
一、利用ASCII
我們知道每個(gè)字符都有一個(gè)ASCII碼,利用這一點(diǎn)可以將字符-'0'轉(zhuǎn)為數(shù)字。在字母大小寫轉(zhuǎn)換時(shí)也可以利用這個(gè)性質(zhì)。
#include<iostream> #include<cstring> using namespace std; char ch[]={'1','2','3','4','5'}; int main(){ for(int i=0;i<strlen(ch);i++){ cout<<ch[i]-'0'<<" "; } return 0; }
輸出int類型的1,2,3,4,5
二、stoi()
stoi函數(shù)是C++標(biāo)準(zhǔn)庫(kù)中的一個(gè)函數(shù),用于將字符串轉(zhuǎn)換為整數(shù),針對(duì)于string類型的。stoi函數(shù)是C++11引入的,因此只有在C++11及以上的版本中才能使用該函數(shù)。如果你的編譯器版本較老,不支持C++11,那么就無(wú)法使用stoi函數(shù)。學(xué)校機(jī)房的dev-C++一般是C98標(biāo)準(zhǔn)的,需要自己手動(dòng)改成C11。
int num=stoi(const string& str, size_t* idx = 0, int base = 10);
其中,str是需要轉(zhuǎn)換的字符串;idx是一個(gè)指向size_t類型的指針,用于保存轉(zhuǎn)換結(jié)束的位置;base是進(jìn)制,默認(rèn)為10進(jìn)制。一般只給傳第一個(gè)參數(shù)即可,也可以利用此函數(shù)實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換。
類似的還有stol()、stof()、stod(),分別將字符串類型轉(zhuǎn)換成long long、float、double類型。
#include<iostream> #include<cstring> using namespace std; string s="12345"; int main(){ int a=stoi(s); long long b=stol(s); double c=stod(s); float d=stof(s); cout<<"int:"<<a<<endl; cout<<"long long:"<<b<<endl; cout<<"double:"<<c<<endl; cout<<"float:"<<d<<endl; return 0; }
三、atoi()
atoi()函數(shù)是C語(yǔ)言中的一個(gè)函數(shù),主要用于將字符串轉(zhuǎn)換為整數(shù)。針對(duì)于字符數(shù)組,類似的還有atol()、atof()、atod()。
int num=atoi(const char *str);
其中,str是一個(gè)以null結(jié)尾的字符串,表示要轉(zhuǎn)換的整數(shù)。
該函數(shù)將從字符串的開頭開始解析,直到遇到第一個(gè)非數(shù)字字符為止。如果開頭是一個(gè)正號(hào)或負(fù)號(hào),它也會(huì)解析為整數(shù)的一部分。如果字符串中的第一個(gè)非空格字符不是有效的數(shù)字字符或正負(fù)號(hào),則返回0。
#include<iostream> #include<cstring> using namespace std; char s1[]="12345"; char s2[]="qwe"; int main(){ int a=atoi(s1); long long b=atol(s2); cout<<"int:"<<a<<endl; cout<<"long long:"<<b<<endl; return 0; }
四、sscanf()
sscanf函數(shù)是一個(gè)用來(lái)將字符串按照指定格式解析的函數(shù)。它接受一個(gè)輸入字符串和一個(gè)格式字符串作為參數(shù),并根據(jù)格式字符串的指示將字符串中的數(shù)據(jù)解析為對(duì)應(yīng)的變量中。主要是針對(duì)于字符數(shù)組。
sscanf(str,"%d",&num);//str字符數(shù)組,%dint類型,num轉(zhuǎn)換完成數(shù)字
代碼應(yīng)用如下:
#include<iostream> #include<cstring> using namespace std; char s1[]="12345"; char s2[]="qwe"; int main(){ int a; long long b; sscanf(s1,"%d",&a); sscanf(s2,"%lld",&b);//轉(zhuǎn)字母會(huì)成亂碼 cout<<"int:"<<a<<endl; cout<<"long long:"<<b<<endl; return 0; }
五、stringstream
stringstream是C++中的一個(gè)類,可以用來(lái)對(duì)字符串進(jìn)行輸入輸出操作。它是基于字符串的流,可以用來(lái)將字符串轉(zhuǎn)換為其他類型的數(shù)據(jù),以及將其他類型的數(shù)據(jù)轉(zhuǎn)換為字符串。stringstream類的頭文件是<sstream>,我們需要包含這個(gè)頭文件才能使用stringstream類。
#include<iostream> #include<sstream> #include<cstring> #include<typeinfo> using namespace std; int main(){ stringstream ss; string s="12345"; int num; ss<<s;//將字符串讀入字符串流 ss>>num;//從字符串流中讀取數(shù)據(jù)轉(zhuǎn)換為整數(shù) cout<<typeid(num).name()<<" "<<num<<endl; return 0; }
數(shù)字轉(zhuǎn)為字符串
一、利用ASCII
字符轉(zhuǎn)數(shù)字可以-'0',數(shù)字轉(zhuǎn)字符那么就可以+'0',還是利用了ASCII碼值的特性。
#include<iostream> #include<cstring> using namespace std; int nums[]={1,2,3,4,5}; int main(){ for(int i=0;i<sizeof(nums)/sizeof(int);i++){ cout<<nums[i]+'0'<<" "; } return 0; }
注意:轉(zhuǎn)換結(jié)果為49 50 51 52 53 ,對(duì)應(yīng)ASCII碼值,因?yàn)樵砭褪怯肁SCII碼轉(zhuǎn)換的。
二、to_string()
to_string函數(shù)是C++標(biāo)準(zhǔn)庫(kù)提供的一個(gè)函數(shù),用于將不同類型的數(shù)據(jù)轉(zhuǎn)換為字符串??梢詫nt、float、double、long long等類型轉(zhuǎn)換為string類型。需要包含頭文件#include<cstring>
#include<iostream> #include<cstring> using namespace std; int a=24; long long b=12345678; double c=3.1415; string s; int main(){ s=to_string(a); cout<<s<<endl; s=to_string(b); cout<<s<<endl; s=to_string(c); cout<<s<<endl; return 0; }
三、itoa()
itoa函數(shù)用于將整數(shù)轉(zhuǎn)換為字符串。類似的還有l(wèi)toa、ftoa、dtoa分別將long long、float、double轉(zhuǎn)換為字符串類型。針對(duì)于字符數(shù)組。
itoa(num,str,10);
第一個(gè)參數(shù)是待轉(zhuǎn)換的數(shù)字,第二個(gè)參數(shù)是轉(zhuǎn)換完成的字符數(shù)組,第三個(gè)是轉(zhuǎn)換的進(jìn)制數(shù),默認(rèn)10進(jìn)制。
#include<iostream> #include<cstring> using namespace std; int n=12345; char str[10]; int main(){ itoa(n,str,10); cout<<str<<endl; return 0; }
結(jié)果為12345
四、sprintf()
sprintf()函數(shù)是c語(yǔ)言庫(kù)中的函數(shù),可以將數(shù)字轉(zhuǎn)換為字符串類型,一般轉(zhuǎn)換為字符數(shù)組。
sprintf(str,"%d",num);
str是轉(zhuǎn)換完成的字符數(shù)組,%d是類型,num是待轉(zhuǎn)換的數(shù)字。
#include<iostream> #include<cstring> using namespace std; int n=12345; char str[10]; int main(){ sprintf(str,"%d",n); cout<<str<<endl; return 0; }
結(jié)果為:12345
五、stringstream
與字符串轉(zhuǎn)數(shù)字的一樣,可以互相轉(zhuǎn)換,同時(shí)還是要包含頭文件<sstream>,具體使用如下
#include<iostream> #include<sstream> #include<cstring> #include<typeinfo> using namespace std; int main(){ stringstream ss; string s="12345"; int num=54321; ss<<num;//將int類型的數(shù)據(jù)寫入字符串流中 s=ss.str();//將字符串流中的數(shù)據(jù)轉(zhuǎn)換為string類型 cout<<typeid(s).name()<<" "<<num<<endl; return 0; }
以上就是C/C++實(shí)現(xiàn)數(shù)字與字符串互相轉(zhuǎn)換的多種方法的詳細(xì)內(nèi)容,更多關(guān)于C/C++數(shù)字與字符串互相轉(zhuǎn)換的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C++11中std::declval的實(shí)現(xiàn)機(jī)制淺析
這篇文章主要給大家介紹了關(guān)于C++11中std::declval實(shí)現(xiàn)機(jī)制的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-07-07C++實(shí)現(xiàn)LeetCode(241.添加括號(hào)的不同方式)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(241.添加括號(hào)的不同方式),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07C++棧(stack)的模板類實(shí)現(xiàn)代碼
這篇文章主要為大家詳細(xì)介紹了C++棧(stack)的模板類實(shí)現(xiàn)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06減少C++代碼編譯時(shí)間的簡(jiǎn)單方法(必看篇)
下面小編就為大家?guī)?lái)一篇減少C++代碼編譯時(shí)間的簡(jiǎn)單方法(必看篇)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01C語(yǔ)言中的運(yùn)算符和結(jié)合性問(wèn)題
這篇文章主要介紹了C語(yǔ)言中的運(yùn)算符和結(jié)合性問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03C語(yǔ)言中6組指針和自增運(yùn)算符結(jié)合方式的運(yùn)算順序問(wèn)題
本文通過(guò)代碼實(shí)現(xiàn)分析了6種組合:* p++,(* p)++,* (p++),++* p,++( * p), * (++p),需要的朋友可以參考下2015-07-07C++與C#互調(diào)dll的實(shí)現(xiàn)步驟
這篇文章主要介紹了C++與C#互調(diào)dll的實(shí)現(xiàn)步驟,dll動(dòng)態(tài)鏈接庫(kù)的共享在一些大型項(xiàng)目中有一定的應(yīng)用價(jià)值,需要的朋友可以參考下2014-08-08