string

string (สตริง สายอักขระ ข้อความ) เป็น ADT และ datatype ชนิดหนึ่งสำหรับเก็บข้อความ สำหรับทั้งภาษา C และ C++ นั้น ค่าคงที่ string (const string) จะเขียนอยู่ในคู่ของอัญประกาศ ("…") เช่น "hello world"

ภาษา C

ภาษา C ไม่มี datatype ชื่อ string จริงๆ มีแต่รูปแบบ string ซึ่งเป็น array ของ char และมีการจัดเก็บข้อมูลพิเศษกว่า array ของ char ธรรมดาเล็กน้อย

การเก็บข้อมูล

array ของ char จะประกอบไปด้วยอักขระต่างๆ อักขระในช่องที่ $i$ ใน array แทนด้วยอักขระตัวที่ $i$ ของ string
หลังจากอักขระช่องสุดท้ายจะมี null character ('\0', 0) ปิดท้าย
ดังนั้น string ความยาว $n$ ก็ต้องประกาศ array อย่างน้อย $n + 1$ ช่อง

อาจกล่าวได้ว่า string = array of char + '\0'

const string

const string "abcxyz" จะเทียบเท่ากับ const array {'a', 'b', 'c', 'x', 'y', 'z', '\0'}

การประกาศตัวแปร

สมมุติจะสร้าง string ซึ่งเก็บข้อมูล "abcx" โดยประกาศ array 10 ช่อง

char str[10];
str[0] = 'a';
str[1] = 'b';
str[2] = 'c';
str[3] = 'x';
str[4] = '\0';

ในกรณีที่ประกาศตัวแปร สามารถใช้ initializer คล้ายๆ array ได้ (อ่านเพิ่มเติมที่ array)

char str[10] = {'a', 'b', 'c', 'x', '\0'};

หรือ
char str[10] = "abcx";

คล้ายๆกับ array ซึ่งอาจจะไม่ระบุจำนวนช่องก็ได้ จำนวนช่องของ array จะเป็น $n + 1$ ตามจำนวนการใช้ช่อง

char str[] = "abcx";

เนื่องจาก array และ pointer คล้ายๆกัน (แทบจะเป็นสิ่งเดียวกัน) จากโค้ดที่แล้วจึงอาจเขียนได้ว่า

char* str = "abcx";

พึงระวังว่าความหมายของคำสั่งนี้ หมายความว่าให้ address ของ array/string "abcx" มาใส่ใน pointer str
ซึ่ง "abcx" เป็นค่าคงที่ ถูกเก็บในหน่วยความจำส่วน code ซึ่งหน่วยความจำส่วนนี้แก้ค่าไม่ได้
หากสั่ง
str[0] = 'z';

โปรแกรมจะ crash ทันที

แต่ const string = const array = const char* ดังนั้นจึงสามารถ assign เมื่อไหร่ก็ได้ แตกต่างจาก array ที่ทำได้ตอน initialize เท่านั้น

char *str;
str = "abcx";

จากโค้ดตัวอย่างทั้ง 2 อันที่แล้ว สำหรับภาษา C++ ซึ่งเคร่งครัดเรื่อง datatype มากกว่า C จะไม่สามารถทำได้ เพราะ "abcx" เป็น const string = const char* ดังนั้น str ก็ควรเป็น const char* ด้วย จึงสามารถ assign ค่าได้เฉพาะตอน initialize เท่านั้น นอกจากนี้ datatype ก็ควรจะเป็น const char* แทนที่ char* ด้วย

const char *str = "abcx";

หากอยาก assign ค่าเมื่อไหร่ก็ได้ อาจใช้ datatype conversion เข้ามาช่วย โดยการประกาศเป็น char* เหมือนเดิม แต่การ assign ค่าต้องมีการทำ datatype conversion ด้วย

char *str;
str = (char*)"abcx";

ฟังก์ชั่นใน string.h

อ่านเพิ่มที่ string.h

ภาษา C++

อาจใช้ array ของ char เหมือนภาษา C หรือใช้ std::string ก็ได้

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License