一、基礎概念
在進行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
微信掃一掃
支付寶掃一掃