在ACM競賽中,經常須要將讀入的數字的每位分離出來,若是採用取餘的方法,花
費的時間就會太長,這時候,咱們能夠將讀入的數據當成字符串來處理,這樣就方便、省
時多了。下面這個程序演示了求一個整數各位的和:ios
#include <string> #include <iostream> using namespace std; int main(){ string s = "123455"; int sum = 0; for(int i = 0;i<s.length();i++){ switch(s[i]){ case '0':sum+=0;break; case '1':sum+=1;break; case '2':sum+=2;break; case '3':sum+=3;break; case '4':sum+=4;break; case '5':sum+=5;break; case '6':sum+=6;break; case '7':sum+=7;break; case '8':sum+=8;break; case '9':sum+=9;break; } } cout << sum; }
sscanf函數很管用,它能夠把一個字符串按你須要的方式分離出子串,
甚至是數字。下面這個程序演示了sscanf函數的具體用法:函數
#include <iostream> #include <string> using namespace std; int main(){ char a[100],b[100],c[100]; sscanf("122 3ss 3ww","%s %s %s",a,b,c); string s = a; cout << s <<endl; int p,l,k; sscanf("122 $122$333","%d $%d$%d",&p,&l,&k); cout << p <<endl; cout << l <<endl; }
有時候,string 對象與數值之間須要相互轉換,下面這個例子詳細說明了如何完成這
項工做:spa
#include <iostream> #include <string> #include <sstream> using namespace std; //C++方法:將數值轉換爲string string convertToString(double x) { ostringstream o; if (o << x) return o.str(); return "conversion error";//if error } //C++方法:將string轉換爲數值 double convertFromString(const string &s) { istringstream i(s); double x; if (i >> x) return x; return 0.0;//if error } int main(int argc, char* argv[]) { //將數值轉換爲string的第一種方法:C方法 char b[10]; string a; sprintf(b,"%d",1975); a=b; cout<<a<<endl; //將數值轉換爲string的第二種方法:C++方法 string cc=convertToString(1976); cout<<cc<<endl; //將string轉換爲數值的方法:C++方法 string dd="2006"; int p=convertFromString(dd)+2; cout<<p<<endl; return 0; }