sscanf 和 sprintf 和c_str() 和 str()
阿新 • • 發佈:2018-12-12
掌握c語言 字串轉換 c++字串轉換
注意c_str()返回時 臨時變數,存在銷燬的可能 所以最好把內容複製了
#include<iostream> #include<cstdio> #include<string> #include<sstream> using namespace std; //c++方法 將double數值 轉換成string物件 string convertToString(double x) { ostringstream o; if(o<<x)//將x作為string流入o //很像c語言裡面的sprintf return o.str();//將o中的值轉換成string物件 else return "conversion error";//o讀取x失敗 } /*c_str()函式返回一個指向正規C字串的指標, 內容與本string串相同. 這是為了與c語言相容,在c語言中沒有string型別,故必須通過string類物件的成員函式c_str()把string 物件轉換成c中的字串樣式。 注意:一定要使用strcpy()函式 等來操作方法c_str()返回的指標 比如:最好不要這樣: char* c; string s="1234"; c = s.c_str(); //c最後指向的內容是垃圾,因為s物件被析構,其內容被處理 應該這樣用: char c[20]; string s="1234"; strcpy(c,s.c_str()); 這樣才不會出錯,c_str()返回的是一個臨時指標,不能對其進行操作*/ //c++方法 將string物件轉換成double數值; double convertFromString(string & s) { istringstream is(s); double x; if(is>>x)//很像c語言裡面的sscanf 從流中第一個字元開始分流出一個double return x; else return 0.0; } int main(){ //sscanf() 從第一個字串引數 寫入 第三個引數(取地址) char a[100] = "4564.46", b[100] = "4646"; double a1; int b1; //sscanf(a + 2, "%lf", &a1); sscanf(a + 4, "%lf", &a1);//從小數點開始讀 會幫您補0 //sscanf(b + 3, "%d", &b1); //不要超過 來讀 sscanf(b, "%d", &b1); cout << a1 << endl; cout << b1 << endl; //sprintf() 從第三個引數 寫入 第一個字串引數(不用取地址) double d = 123.46; char d1[100]; int c = 464341; char c1[100]; sprintf(c1, "%d", c); cout << c1 << endl; sprintf(d1, "%.1lf", d); //可以控制精度(四捨五入好像) 不然預設小數點6位 cout << d1 << endl; string h = "564.134", k = "783143"; int k1; double h1; h1 = convertFromString(h), k1 = convertFromString(k); cout << h1 << endl; cout << k1 << endl; string y, u; y = convertToString(h1), u = convertToString(k1); cout << y << endl; cout << u << endl; return 0; }