std::string เทียบกับอาร์เรย์อักขระแบบ C
เปรียบเทียบ std::string สมัยใหม่กับอาร์เรย์อักขระแบบดั้งเดิมที่ลงท้ายด้วยค่าว่าง และเลือกใช้ให้เหมาะสม
std::string เทียบกับอาร์เรย์อักขระแบบ C เป็นบทเรียน C++ Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C++ Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน
สองวิธีสำหรับเก็บข้อความ
C++ สืบทอดสตริงแบบ C ซึ่งเป็นอาร์เรย์ char ที่ลงท้ายด้วย null และเพิ่ม std::string จากไลบรารีมาตรฐานเข้ามา โดยทั่วไปควรใช้ std::string แทบทุกกรณี
สตริงแบบ C
สตริงแบบ C คือลำดับของ char ที่ลงท้ายด้วยไบต์ null '\0' ฟังก์ชันอย่าง strlen จะเดินผ่านอาร์เรย์จนกว่าจะพบค่า null
const char* greeting = "Hello";
// Memory: H, e, l, l, o, \0 (6 bytes)
#include <cstring>
std::cout << std::strlen(greeting); // 5std::string
std::string จัดการหน่วยความจำของตัวเองและขยายตามต้องการ สร้างอินสแตนซ์ได้เหมือนชนิดข้อมูลอื่น ๆ
#include <string>
std::string name = "Ada";
name += " Lovelace";
std::cout << name; // Ada Lovelaceขนาดและความยาว
std::string::size() และ length() เป็นชื่อพ้องกัน และส่งกลับจำนวนอักขระ (ไม่รวมตัวสิ้นสุด null)
std::string s = "hello";
std::cout << s.size(); // 5
std::cout << s.length(); // 5การเข้าถึงด้วยดัชนี
อ่านหรือเขียนอักขระด้วย [] หรือ at() ต่างจาก [] ตรงที่ at() จะส่งข้อผิดพลาดออกมาหากดัชนีอยู่นอกช่วง
std::string s = "cat";
char first = s[0]; // 'c'
char last = s.at(2); // 't'
// s.at(10) throws std::out_of_rangeสตริงว่าง
ใช้ empty() แทน size() == 0 เพราะอ่านเข้าใจได้ชัดเจนกว่าและทำงานเร็วเท่ากัน
ควรใช้ const char* เมื่อใด
ใช้สตริงแบบ C เมื่อ:
- เชื่อมต่อกับไลบรารี C หรือ API ของระบบปฏิบัติการ
- ทำงานกับลิเทอรัลสตริงที่ไม่เปลี่ยนแปลง
- ทำงานกับระบบฝังตัวที่ไม่มีไลบรารีมาตรฐาน
การแปลงระหว่างสองแบบ
รับสตริงแบบ C จาก std::string ด้วย .c_str() สร้าง std::string จาก const char* ได้โดยตรง
std::string s = "Hello";
const char* c = s.c_str();
const char* literal = "world";
std::string s2(literal);ลิเทอรัลสตริงคือ const char[]
ลิเทอรัลสตริงอย่าง "hi" มีชนิดข้อมูลเป็น const char[3] (รวมตัวสิ้นสุด null) และอยู่ในหน่วยความจำแบบอ่านอย่างเดียว
ลิเทอรัลสตริงแบบดิบ
เติมคำนำหน้าด้วย R"(...)" เพื่อข้ามการประมวลผลอักขระหลีก ใช้ได้ดีกับรูปแบบนิพจน์ทั่วไปและเส้นทางไฟล์
std::string regex = R"(\d+\.\d{2})";
std::string path = R"(C:\Users\Ada)";การวนซ้ำผ่าน std::string
สตริงเป็นคอนเทนเนอร์ สามารถวนซ้ำด้วย for แบบช่วง ดัชนี หรือตัววนซ้ำ
std::string s = "abc";
for (char c : s) std::cout << c << " "; // a b cตรวจสอบสั้น ๆ
เมธอดใดของ std::string จะส่งข้อผิดพลาดออกมาเมื่อดัชนีอยู่นอกช่วง
สรุปทบทวน
ควรใช้ std::string สำหรับข้อความที่จัดการหน่วยความจำให้ ใช้ const char* สำหรับลิเทอรัลและการเชื่อมต่อร่วมกับ API ของ C แปลงระหว่างสองแบบด้วย .c_str() และการสร้างโดยตรง
คำถามที่พบบ่อย
บทเรียน “std::string เทียบกับอาร์เรย์อักขระแบบ C” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “std::string เทียบกับอาร์เรย์อักขระแบบ C” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C++ Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “std::string เทียบกับอาร์เรย์อักขระแบบ C”
เปรียบเทียบ std::string สมัยใหม่กับอาร์เรย์อักขระแบบดั้งเดิมที่ลงท้ายด้วยค่าว่าง และเลือกใช้ให้เหมาะสม คุณปฏิบัติ C++ Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C++ Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน C++ Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “std::string เทียบกับอาร์เรย์อักขระแบบ C” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน C++ Academy นี้ได้ไหม
ได้ บทเรียน C++ Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- std::string เทียบกับอาร์เรย์อักขระแบบ C
- การดำเนินการกับข้อความ: ต่อ แบ่ง ค้นหา แทนที่
- สตรีมข้อความ stringstream สำหรับการแยกวิเคราะห์
- การแปลงข้อความ: to_string และ stoi