ฉันจะแปลงจาก stringstream เป็น string ใน C ++ ได้อย่างไร


124

ฉันจะแปลงจากstd::stringstreamเป็นstd::stringภาษา C ++ ได้อย่างไร

ฉันต้องเรียกเมธอดบนสตรีมสตริงหรือไม่


4
คุณได้อ่านคำตอบของคำถามก่อนหน้านี้หรือไม่ซึ่งครอบคลุมถึงเรื่องนี้

คำตอบ:



74

ใช้. str () - วิธีการ :

จัดการเนื้อหาของสตริงอ็อบเจ็กต์

1) rdbuf()->str()ส่งคืนสำเนาของสตริงพื้นฐานเช่นถ้าโดยการเรียก

2) แทนที่เนื้อหาของสตริงพื้นฐานราวกับว่ากำลังโทรrdbuf()->str(new_str)...

หมายเหตุ

สำเนาของสตริงพื้นฐานที่ส่งคืนโดย str เป็นอ็อบเจ็กต์ชั่วคราวที่จะถูกทำลายเมื่อสิ้นสุดนิพจน์ดังนั้นการเรียกc_str()ใช้ผลลัพธ์ของstr()(เช่นในauto *ptr = out.str().c_str();) โดยตรงจึงทำให้ตัวชี้ห้อย ...


14

std::stringstream::str() เป็นวิธีการที่คุณกำลังมองหา

ด้วยstd::stringstream:

template <class T>
std::string YourClass::NumericToString(const T & NumericValue)
{
    std::stringstream ss;
    ss << NumericValue;
    return ss.str();
}

std::stringstreamเป็นเครื่องมือทั่วไปมากกว่า คุณสามารถใช้คลาสพิเศษstd::ostringstreamสำหรับงานเฉพาะนี้ได้

template <class T>
std::string YourClass::NumericToString(const T & NumericValue)
{
    std::ostringstream oss;
    oss << NumericValue;
    return oss.str();
}

หากคุณกำลังทำงานกับstd::wstringประเภทของสตริงคุณต้องเลือกstd::wstringstreamหรือเลือกstd::wostringstreamแทน

template <class T>
std::wstring YourClass::NumericToString(const T & NumericValue)
{
    std::wostringstream woss;
    woss << NumericValue;
    return woss.str();
}

หากคุณต้องการให้ประเภทอักขระของสตริงของคุณสามารถเลือกรันไทม์ได้คุณควรกำหนดให้เป็นตัวแปรเทมเพลต

template <class CharType, class NumType>
std::basic_string<CharType> YourClass::NumericToString(const NumType & NumericValue)
{
    std::basic_ostringstream<CharType> oss;
    oss << NumericValue;
    return oss.str();
}

สำหรับวิธีการทั้งหมดข้างต้นคุณต้องรวมไฟล์ส่วนหัวสองไฟล์ต่อไปนี้

#include <string>
#include <sstream>

โปรดทราบว่าอาร์กิวเมนต์NumericValueในตัวอย่างด้านบนยังสามารถส่งผ่านเป็นstd::stringหรือstd::wstringใช้กับอินสแตนซ์std::ostringstreamและstd::wostringstreamตามลำดับได้ ไม่จำเป็นที่NumericValueจะต้องเป็นค่าตัวเลข


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.