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

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);  // 5

std::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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

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