string轉對象詳解

一、基礎概念

在進行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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
CNBYN的頭像CNBYN
上一篇 2025-02-24 00:34
下一篇 2025-02-24 00:34

相關推薦

  • c# enum轉換成string

    本文將從以下幾個方面詳細闡述c#中enum類型轉換成string類型的方法及注意事項。 一、基本語法和示例 c#中的enum類型可以看作是一組有名字的常量值,通常用於定義一組相關的…

    編程 2025-04-29
  • 面向對象編程、類和對象

    面向對象編程(Object-Oriented Programming, OOP)是一種編程方法,它將現實世界中的事物抽象為對象(Object),對象的屬性和方法被封裝成類(Clas…

    編程 2025-04-29
  • Mapster:一個高性能的對象映射庫

    本文將深入介紹furion.extras.objectmapper.mapster,一個高性能的對象映射庫,解釋它是如何工作的以及如何在你的項目中使用它。 一、輕鬆地實現對象之間的…

    編程 2025-04-28
  • Python返回對象類型

    Python是一種動態、解釋型、高級編程語言。Python是一種面向對象的語言,即所有的一切都是一個對象。 一、基本類型 Python中的基本類型有整數int、浮點數float、布…

    編程 2025-04-28
  • Python中通過對象不能調用類方法和靜態方法的解析

    當我們在使用Python編寫程序時,可能會遇到通過對象調用類方法和靜態方法失敗的問題,那麼這是為什麼呢?接下來,我們將從多個方面對這個問題進行詳細解析。 一、類方法和靜態方法的定義…

    編程 2025-04-27
  • Python內置函數——查看對象內存

    本文將介紹Python內置函數中,在開發中查看對象內存的相關函數。 一、id()函數 id()函數是Python內置函數,用於返回對象的唯一標識符,也就是對象在內存中的地址。 nu…

    編程 2025-04-27
  • JWT String Argument Cannot Be Null or Empty

    JWT(JSON Web Token)是一種用於進行身份驗證的標準。在使用JWT時,經常會遇到“JWT String Argument Cannot Be Null or Empt…

    編程 2025-04-27
  • Python中String包含的進階應用

    對於Python程序員而言,String類型的操作是日常工作中必不可少的一部分。String包含的操作很多,其中最基礎的操作就是判斷一個字符串是否包含另一個字符串。本篇文章將對Py…

    編程 2025-04-27
  • 解決ERP運行時錯誤429:ActiveX不能創建對象 DAO350

    ERP運行時錯誤429是由於“ActiveX不能創建對象”而引發的。這種錯誤通常是由於您在嘗試訪問Microsoft Access數據庫時缺少了必要的組件。 一、安裝並註冊DAO庫…

    編程 2025-04-27
  • 神經網絡代碼詳解

    神經網絡作為一種人工智能技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網絡的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網絡模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25

發表回復

登錄後才能評論