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