C++ Academy · บทเรียน

สตรีมข้อความ stringstream สำหรับการแยกวิเคราะห์

ใช้ std::stringstream เพื่อแยกโทเคนและแยกวิเคราะห์ข้อความเป็นค่าตามชนิดข้อมูล

บทเรียน 3 จาก 413 ขั้นตอน

สตรีมข้อความ stringstream สำหรับการแยกวิเคราะห์ เป็นบทเรียน C++ Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C++ Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน

stringstream คืออะไร

std::stringstream ครอบสตริงไว้ในส่วนติดต่อแบบ iostream คุณสามารถอ่านและเขียนข้อมูลด้วย >> และ << ได้ราวกับเป็น cin หรือ cout

#include <sstream>
std::stringstream ss;

สร้างสตริงด้วย stringstream

ใช้ stringstream เพื่อสร้างสตริงที่ซับซ้อนจากข้อมูลหลายชนิด เรียก .str() เพื่อรับผลลัพธ์

std::stringstream out;
out << "User: " << name << ", Age: " << age;
std::string result = out.str();

แยกวิเคราะห์ด้วย stringstream

เริ่มต้นจากสตริง แล้วดึงค่าออกมาด้วย >> โดยคำสั่งนี้จะแบ่งข้อมูลเป็นโทเค็นตามช่องว่าง

std::stringstream in("42 3.14 hello");
int i; double d; std::string s;
in >> i >> d >> s;

อ่านหนึ่งบรรทัดเป็นโทเค็น

ใช้ getline ร่วมกับ stringstream เพื่อแบ่งข้อมูลในแต่ละบรรทัดออกเป็นโทเค็นทีละบรรทัด

std::string line = "1 2 3 4 5";
std::stringstream ss(line);
int n;
while (ss >> n) {
    std::cout << n * n << " ";
}
// 1 4 9 16 25

แบ่งตามตัวคั่น

ส่งตัวคั่นให้กับ getline ของ stringstream เพื่อแบ่งข้อมูลตามเครื่องหมายจุลภาค อัฒภาค หรืออักขระใด ๆ

std::string csv = "apple,banana,cherry";
std::stringstream ss(csv);
std::string fruit;
while (std::getline(ss, fruit, ',')) {
    std::cout << fruit << "\n";
}

istringstream และ ostringstream

มีให้เลือกสามรูปแบบ:

  • std::istringstream — อ่านอย่างเดียว
  • std::ostringstream — เขียนอย่างเดียว
  • std::stringstream — อ่านและเขียน

เลือกใช้รูปแบบที่แคบที่สุดเพื่อให้โค้ดชัดเจน

ตรวจสอบข้อผิดพลาดในการแยกวิเคราะห์

หากการดึงค่าล้มเหลว เช่น ชนิดข้อมูลไม่ถูกต้อง สตรีมจะตั้งบิตแสดงความล้มเหลว ให้ตรวจสอบ !ss หรือ ss.fail() หลังการดึงค่า

std::stringstream ss("not_a_number");
int x;
if (!(ss >> x)) {
    std::cout << "Parse failed";
}

รีเซ็ต stringstream

หากต้องการใช้ stringstream ซ้ำ ให้ล้างสถานะและเนื้อหาของสตรีม

std::stringstream ss;
ss << "first";
ss.str("");        // clear contents
ss.clear();        // clear flags
ss << "second";

แปลงตัวเลขเป็นสตริง

สำหรับการแปลงแบบง่าย std::to_string จะกระชับกว่า stringstream

std::string s = std::to_string(42);   // "42"
std::string p = std::to_string(3.14); // "3.140000"

แปลงสตริงเป็นตัวเลขโดยไม่ใช้สตรีม

std::stoi, std::stod, std::stoll ใช้แยกวิเคราะห์ตัวเลขจากสตริง และจะแจ้งข้อผิดพลาดเมื่อข้อมูลขาเข้าไม่ถูกต้อง

int n = std::stoi("42");
double d = std::stod("3.14");
// std::stoi("xyz") throws std::invalid_argument

C++17 std::from_chars

หากต้องการความเร็วสูงสุด std::from_chars ใน <charconv> สามารถแยกวิเคราะห์ได้โดยไม่ใช้ข้อยกเว้นหรือการจองหน่วยความจำ เหมาะอย่างยิ่งสำหรับเส้นทางการทำงานที่ถูกเรียกบ่อย

ตรวจสอบอย่างรวดเร็ว

ต้องรวมส่วนหัวใดเพื่อใช้งาน std::stringstream

ทบทวน

std::stringstream เปลี่ยนสตริงให้เป็นสตรีมเพื่อให้แยกวิเคราะห์และจัดรูปแบบได้ง่าย ใช้ร่วมกับ std::getline เพื่อแบ่งข้อมูลตามตัวคั่น สำหรับกรณีง่าย ๆ ให้เลือกใช้ std::to_string และ std::stoi

เริ่มต้นได้ฟรี

เรียนรู้ C++ ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
51
บทเรียน
203

คำถามที่พบบ่อย

บทเรียน “สตรีมข้อความ stringstream สำหรับการแยกวิเคราะห์” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “สตรีมข้อความ stringstream สำหรับการแยกวิเคราะห์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C++ Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “สตรีมข้อความ stringstream สำหรับการแยกวิเคราะห์”

ใช้ std::stringstream เพื่อแยกโทเคนและแยกวิเคราะห์ข้อความเป็นค่าตามชนิดข้อมูล คุณปฏิบัติ C++ Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C++ Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน C++ Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “สตรีมข้อความ stringstream สำหรับการแยกวิเคราะห์” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน C++ Academy นี้ได้ไหม

ได้ บทเรียน C++ Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. std::string เทียบกับอาร์เรย์อักขระแบบ C
  2. การดำเนินการกับข้อความ: ต่อ แบ่ง ค้นหา แทนที่
  3. สตรีมข้อความ stringstream สำหรับการแยกวิเคราะห์
  4. การแปลงข้อความ: to_string และ stoi
← กลับไปที่ C++ Academy