一、基礎概念
在進行string轉對象之前,需要知道幾個基礎概念。首先,C++中有三種基本的用戶自定義類型:
- 類(class)
- 結構體(structure)
- 聯合(union)
這三種類型都可以用來定義數據結構。
其次,需要知道對象(object)的概念。對象是一個變量,它存儲了一個特定類的數據。定義對象時,需要指定該對象的數據類型。
最後,需要理解string類型。string是C++中的一種特殊類型,它由若干個字符組成,可以用來存儲字符串。
二、string轉基本類型
在C++中,可以使用各種方法將string轉換為基本類型,例如int、bool、double等。
1.將string轉換為int類型
int stoi (const string& str, size_t* idx = 0, int base = 10);
該方法可以將一個以十進制表示的string轉換為int類型。
示例:
#include <iostream> #include <string> using namespace std; int main() { string str = "1234"; int num = stoi(str); cout << num << endl; return 0; }
輸出:
1234
2.將string轉換為bool類型
bool stob (const string& str);
該方法可以將一個表示為字符串的bool值轉換為bool類型。
示例:
#include <iostream> #include <string> using namespace std; int main() { string str = "true"; bool b = stob(str); cout << b << endl; return 0; }
輸出:
1
3.將string轉換為double類型
double stod (const string& str, size_t* idx = 0);
該方法可以將一個表示為字符串的double類型轉換為double類型。
示例:
#include <iostream> #include <string> using namespace std; int main() { string str = "3.1415"; double pi = stod(str); cout << pi << endl; return 0; }
輸出:
3.1415
三、string轉自定義類型
1.將string轉換為類對象
將string轉換為類對象需要創建一個類型轉換函數。
示例:
#include <iostream> #include <string> using namespace std; class Rectangle { public: Rectangle(int w, int h) : width(w), height(h) {} int area() const { return width * height; } private: int width; int height; }; Rectangle toRectangle(const string& str) { size_t pos = str.find(","); int w = stoi(str.substr(0, pos)); int h = stoi(str.substr(pos + 1)); Rectangle rect(w, h); return rect; } int main() { string str = "3,4"; Rectangle rect = toRectangle(str); cout << "Area: " << rect.area() << endl; return 0; }
輸出:
Area: 12
2.將string轉換為結構體對象
將string轉換為結構體對象的方法類似於將string轉換為類對象。
示例:
#include <iostream> #include <string> #include <sstream> using namespace std; struct Point { int x; int y; }; Point toPoint(const string& str) { Point p; stringstream ss(str); ss >> p.x; ss.ignore(); ss >> p.y; return p; } int main() { string str = "3,4"; Point p = toPoint(str); cout << "x: " << p.x << " y: " << p.y << endl; return 0; }
輸出:
x: 3 y: 4
3.將string轉換為聯合類型
將string轉換為聯合類型需要依據具體的聯合類型進行轉換。
示例:
#include <iostream> #include <string> using namespace std; union myUnion { int i; char c; }; myUnion toUnion(const string& str) { myUnion u; if (str.length() == 1) { u.c = str[0]; } else { u.i = stoi(str); } return u; } int main() { string str = "A"; myUnion u = toUnion(str); if (str.length() == 1) { cout << "char: " << u.c << endl; } else { cout << "int: " << u.i << endl; } return 0; }
輸出:
char: A
四、異常處理
在進行string轉換時,可能會出現異常,例如string表示的數字超過了int類型的最大值,或者string無法表示為所需的目標類型等。此時,程序會拋出異常。為了避免程序崩潰,需要進行異常處理。
示例:
#include <iostream> #include <string> #include <stdexcept> using namespace std; int main() { string str = "2147483648"; try { int num = stoi(str); cout << num << endl; } catch (const out_of_range& e) { cerr << e.what() << endl; } return 0; }
輸出:
stoi
以上便是關於string轉對象的詳解,可以根據需求進行轉換。
原創文章,作者:CNBYN,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/361216.html