Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

Stringstream ใน C++: การใช้งานและตัวอย่างโค้ด


Stringstream ใน C++ เป็นคลาสที่เชื่อมโยงออบเจ็กต์สตริงกับสตรีม ทำให้สามารถอ่านจากสตริงได้เหมือนกับการอ่านจาก cin ซึ่งเป็นเครื่องมือที่มีประโยชน์สำหรับการแยกคำ การแปลงชนิดข้อมูล และการจัดการข้อความแบบไดนามิก

เมธอดหลักของ Stringstream

  • clear(): ล้างสตรีมและรีเซ็ตสถานะข้อผิดพลาด
  • str(): ดึงหรือตั้งค่าออบเจ็กต์สตริงที่เก็บอยู่ในสตรีม
  • operator << : ใส่ข้อมูลลงใน stringstream (การเขียน)
  • operator >> : อ่านข้อมูลจาก stringstream (การอ่าน)

ตัวอย่างที่ 1: แยกคำจากประโยค

โปรแกรมนี้แสดงวิธีการแบ่งประโยคออกเป็นคำแยกต่างหากและเก็บไว้ใน vector

#include <iostream>
#include <vector>
#include <string>
#include <sstream>
using namespace std;

int main() {
    string str("Hello from the dark side");
    string tmp; // ตัวแปรสำหรับเก็บคำแต่ละคำ
    stringstream str_strm(str);
    vector<string> words; // Vector สำหรับเก็บคำทั้งหมด
    
    while (str_strm >> tmp) {
        // ควรเพิ่มการตรวจสอบ tmp เช่น ตรวจสอบว่างหรือไม่
        // และลบสัญลักษณ์พิเศษ เช่น !, ., ? เป็นต้น
        words.push_back(tmp);
    }
    
    for(int i = 0; i < words.size(); i++)
        cout << words[i] << endl;
    
    return 0;
}

ผลลัพธ์

Hello
from
the
dark
side

ตัวอย่างที่ 2: แปลงเลขฐานสิบเป็นฐานสิบหก

การใช้ stringstream ร่วมกับ manipulator hex เพื่อแปลงค่าตัวเลข

#include <iostream>
#include <sstream>
using namespace std;

int main() {
    int decimal = 61;
    stringstream my_ss;
    my_ss << hex << decimal; // แปลงเป็นฐานสิบหก
    string res = my_ss.str(); // ดึงผลลัพธ์เป็นสตริง
    cout << "The hexadecimal value of 61 is: " << res;
    return 0;
}

ผลลัพธ์

The hexadecimal value of 61 is: 3d

ประโยชน์เพิ่มเติม

Stringstream ยังใช้ได้กับการแปลงชนิดข้อมูลอื่นๆ เช่น การแปลง string เป็น int, double หรือการสร้างสตริงที่ซับซ้อนจากหลายค่า ซึ่งทำให้โค้ดอ่านง่ายและปลอดภัยกว่าการใช้ sprintf หรือ atoi