สตริง
สตริง (String)สตริงในภาษา C ก็คือ อาร์เรย์ของตัวอักษร ที่มีข้อมูลชนิดตัวอักษรเรียงกันไป แต่จะต้องมีจุดสิ้นสุดด้วย โดยจะใช้ตัวอักษรวางหรือ Null Character เป็นจุดสิ้นสุดของสตริง ซึ่งจะต่างจากอาร์เรย์ปกติที่ไม่ต้องมีจุดสิ้นสุดของอาร์เรย์ ซึ่งแสดงในรูปที่10-1
รูปที่ 10-1 แสดงความแตกต่างระหว่างสตริงและอาร์เรย์
การเก็บข้อมูลของสตริง
การเก็บข้อมูลของสตริงนั้น จะมีการเก็บข้อมูลอยู่ 2 ส่วน ส่วนแรกจะเป็นข้อมูลตัวอักษรโดยเก็บเรียงกันไป แบะส่วนที่ 2 จะเก็บจุดสิ้นสุดของสตริง ซึ่งจุสิ้นสุดของสตริงจะใช้ Null Characterหรือ ‘\0’ซึ่งในรูปที่ 10-2 แสดงการเก็บข้อมูลสตริงในหน่วยความจำ

รูปที่ 10-2 การเก็บข้อมูลของลองสตริงบนหน่วยความจำ
รูปที่ 10-3
การเก็บข้อมูลของสตริง
การเก็บข้อมูลของสตริงนั้น จะมีการเก็บข้อมูลอยู่ 2 ส่วน ส่วนแรกจะเป็นข้อมูลตัวอักษรโดยเก็บเรียงกันไป แบะส่วนที่ 2 จะเก็บจุดสิ้นสุดของสตริง ซึ่งจุสิ้นสุดของสตริงจะใช้ Null Characterหรือ ‘\0’ซึ่งในรูปที่ 10-2 แสดงการเก็บข้อมูลสตริงในหน่วยความจำ
รูปที่ 10-2 การเก็บข้อมูลของลองสตริงบนหน่วยความจำ
รูปที่ 10-3
แสดงถึงความแตกต่างระหว่างข้อมูลชนิดตัวอักษรและข้อมูลชนิดสตริงตัวอักษรที่เก็บอยู่ในหน่วยความจำ ข้อมูลชนิดตัวอักษรต้องการหน่วยความจำเพียง 1 ส่วน ส่วนข้อมูลชนิดสตริงตัวอักษร 1 ตัว ต้องการหน่วยความจำ 2 ส่วน ส่วนแรกใช้เก็บข้อมูล และส่วนที่สองใช้เก็บจะสิ้นสุดของสตริง
รูปที่ 10-3 แสดงความแตกต่างของการเก็บข้อมูลระหว่างสตริงกับตัวอักษร
ซึ่งสตริงที่แท้จริง เรียกอีกอย่างว่าค่าคงที่แบบสตริง คือ ตัวอักษรที่วางเรียงกันไป และอยู่ภายในเครื่องหมาย “ “ ซึ่งดังที่ได้แสดงในตัวอย่างถัดไป
“C is a high-level language.”
“Hello”
“abcd”
ความจริงภาษา C จะไม่มีชนิดข้อมูลสตริง แต่มันจะใช้อาร์เรย์ของตัวอักษรแทน ในการประกาศตัวแปรสตริงนั้น จะคำนึงความยาวของข้อมูล และสิ่งที่ลืมไม่ได้ คือ จะต้องมีพื้นที่อีก 1 ในการใช้เก็บจุดสิ้นสุดของสตริงด้วย เพราะภาษา C จะมีข้อบังคับอยู่ว่า ไบต์สุดท้ายจะเป็นส่วนที่เก็บจุดสิ้นสุดของสตริงเสมอ เช่น ผู้ใช้มีข้อมูลขนาด 10 ไบต์หรือ 10 ตัวอักษร ผู้ใช้จะต้องกำหนดขนาดของตัวแปรสตริงตัวนั้นเป็น 11 ไบต์ ตัวอย่างด้านล่างนี้
Char str[11]
แต่ผู้ใช้ก็สามารถประกาศตัวแปรสตริงได้โดยไม่ต้องบอกขนาดของความยาว แต่ผู้ใช้จะต้องกำหนดค่าเริ่มต้นให้กับตัวแปรสตริงตัวนั้นเลย ดังตัวอย่างด้านล่าง และการเก็บข้อมูลในหน่วยความจำแสดงในรูปที่ 10-4
Char month[] = “January”
ในการกำหนดค่าเริ่มต้นนั้น ไม่จำเป็นต้องกำหนดข้อมูลให้เต็มพอดีกับขนาดที่กำหนดไว้ก็ได้ ส่วนพื้นที่ที่เหลือก็จะเป็นค่าที่ไม่สามารถทราบได้ ดังตัวอย่างด้านล่าง และการเก็บข้อมูลในหน่วยความจำแสดงในรูปที่ 10-4
Char str[11] = “Good Day”
รูปที่ 10-4 แสดงการเก็บข้อมูลในหน่วยความจำ
ถ้าผู้ใช้ต้องการที่จะประกาศตัวแปรพอยเตอร์ของสตริง ก็สามารถทำได้เหมือนกับการประกาศพอยเตอร์ตามปกติ แต่จะสามารุใช้ได้กับชนิดข้อมูลที่เป็นตัวอักษรหรือ Char เท่านั้นในการประกาศพอยเตอร์และกำหนดค่าเริ่มต้น สามรถทำได้ดังตัวอย่างด้านล่างนี้
Char *pStr = “Good Day!”;
ลักษณะของตัวแปรพอยเตอร์ของสตริงนี้ เมื่อประกาศแล้วพอยเตอร์จะชั้ไปยังข้อมูลตัวแรกของสตริง ดังที่แสดงในรูปที่ 10-5
รูปที่ 10-5 แสดงลักษณะของตัวแปรพอยเตอร์
Hello
รูปที่ 10-6 แสดงการเข้าข้อมูลของพอยเตอร์ของสตริง
ฟังก์ชัน Input / Output ของสตริงฟังก์ชัน Input
ฟังก์ชันในการ Input ข้อมูลลงสู่สตริงก็คือ ฟังก์ชัน scanf() นั่นเอง แต่จะใช้รูปแบบข้อมูลเป็น %s (ซึ่งจะใช้ทั้งการ Input และ Output ) สมมุตว่ามีตัวแปรสตริงชื่อ month และต้องการจะรับค่าเข้าสู่ตัวแปร month โดยหน้าตัวแปรไม่ต้องใช้เครื่อง Address จะต้องการรับข้อมูลเข้าก็สามารถทำได้ดังนี้
Scanf(“%s”,month);
ในตัวอย่างด้านบนอาจจะมีข้อผิดพลาด เพราะจะใส่ข้อมูลเกินกว่าขนาดความยาวของสตริงที่ประกาศไว้ สมมุติว่ามีตัวแปรสตริง month อยู่ 1 ตัวโดยถูกประกาศไว้ดังตัวอย่างด้านล่างนี้
char month[10];
คงจำข้อบังคับของการใช้สตริงได้ จะสามารถใช้ความยาวของสตริงได้เท่ากับความยาวของสตริง – 1 เพราะไบต์สุดท้ายใช้เก็บจุดสิ้นสุดของสตริง เพราะฉะนั้นในการรับค่าจะต้องทำการกำหนดให้รับข้อมูลจริง ๆ กี่ตัว โดยทำดังตัวอย่างด้านล่าง
scanf(“%9s”,month);
จากคำสั่งหน้าที่ผ่านมา ไม่ว่าผู้ใช้จะพิมพ์ข้อมูลยาวเพียงใด ข้อมูลที่จะเก็บเข้าสู่สตริง month จะมีเพียง 9 ตัวเท่านั้น
ฟังก์ชัน Output
ฟังก์ชันในการ printf ซึ่งในภาษา C นั้น สามารถที่จะกำหนดให้ข้อมูลของสตริง เมื่อเวลาจะพิมพ์แสดงนั้น จะให้อยู่ติดขอบซ้ายหรือขอบขวาก็ได้ โดยใช้เครื่องหมาย - และต้องกำหนดขนาดความยาวของส่วนที่จะพิมพ์ด้วย ดังตัวอย่างต่อไปนี้
printf(“| %30s| \n”,”This is the string”);
printf(“|%-30s| \n”,”This is the string”);
ผลลัพธ์ของสองคำสั่งในตัวอย่างด้านบนจะได้ดังนี้
| This is the string |
| This is the string |
และยังสามารถทำไห้แสดงข้อมูลออกมายาวสั้นได้ตามต้องการ
printf(“| %-15.14s |”,”12345678901234567890”);
ผลลัพธ์ก็จะได้ดังนี้
12345678901234 |
โปรแกรมที่ 10-1 แสดงการ Input และ Output ข้อมูล
ฟังก์ชันอื่นที่ใช้กับสตริง
การใช้สตริงนั้น จะมีฟังก์ชันในการกระทำกับสตริงอีกมาก จะช่วยให้การทำงานนั้นสะดวดมากยิ่งขึ้น ซึ่งการใช้ฟังก์ชันต่าง ๆ ที่เกี่ยวกับสตริงนั้นจะต้องนำเข้าไลบรารีไฟล์ strintg.h ด้วยเสมอ ซึ่งมีฟังก์ชันต่าง ๆ ดังนี้
ความยาวสตริง (strlen)
ฟังก์ชัน strlen เป็นฟังก์ชันที่ส่งค่ากลับเป็นจำนวนความยาวของสตริงที่ส่งไปให้ โดยจะรวมจุดสิ้นสุดของสตริงหรือ Null Charater ด้วย ถ้าเป็นสตริงว่างจะส่งค่ากลับเป็น 0 ซึ่งการประกาศฟังก์ชัน strlen เป็นต้น
Int strlen (const char *string);
ตัวอย่างด้านล่างนี้เป็นการใช้ฟังก์ชัน strlen
x = strlen(“Sorapong”);
หรือ
char str[] = “Good Morning”;
x = strlen(str);
โปรแกรมที่ 10-2 แสดงการใช้ฟังก์ชัน strlen
คัดลอกสตริง (strcpy, styrncpy)
ในภาษา C จะมีฟังก์ชันในการคะดลอกสตริงหนึ่งไปใส่ในอีกสตริงหนึ่ง อยู่ 2 ฟังก์ชัน คือ strcpy และ strncpy ทั้ง 2 ฟังก์ชันนี้ จะเป็นฟังก์ชันในการคัดลอกสตริง แต่ในฟังก์ชันที่ 2
สามารถกำหนดความยาวของสตริงที่ต้องการจะคัดลอกได้
strcpy ฟังก์ชัน strcpy เป็นฟังก์ชันในการคัดลอกสตริงพื้นฐาน การทำงาน คือ จะทำการคัดลอกสตริงต้นทั้งหมด ซึ่งจะรวมไปถึง Null Character ด้วย ไปใส่ในสตริงปลายทาง โดยการประกาศฟังก์ชัน strcpy เป็นดังนี้
char*strcpy (char *to_string, const char *from_string);
| a |
\0
strcpy(s1,s2);
ซึ่งในรูปที่ 10-7 จะแสดง 2 ตัวอย่างในการคัดลอกสตริง สตริงต่าง ๆ ด้วย โดยใช้ฟังก์ชัน strcpy
รูปที่ 10-7 แสดงการเข้าข้อมูลของพอยเตอร์ของสตริง
strncpy ฟังก์ชัน strncpy เป็นฟังก์ชันในการคัดลอกสตริงที่จสามารถแก้ไขปัญหาของฟังก์ชัน strcpy ได้ เนื่องจากฟังก์ชันนี้ ผู้ใช้สามารถกำหนดความยาวในการคัดลอกได้ การประกาศฟังก์ชัน strncpy เป็นดังนี้
char *strncpy(char *to_string,const char *from_string,int size);
ตัวอย่างด้านล่างนี้ เป็นตัวอย่างการใช้ฟังก์ชัน strcpy
strncpy(s1,s2,sizeof(s1));
ในรูปที่ 10-8 จะแสดง 2 ตัวอย่างในการคัดลอกสตริง และผลของใช้ฟังก์ชัน strncpy
รูปที่ 10-8 แสดงการเข้าข้อมูลของพอยเตอร์ของสตริง
เปรียบเทียบสตริง (strcmp,strncmp)
ฟังก์ชันในการเปรียบเทียบสตริงในภาษา c จะมีอยู่ 2 ฟังก์ชัน คือ ฟังก์ชัน strcmp และฟังก์ชัน strncmp ซึ่งฟังก์ชันทั้งสองจะทำการเปรียบเทียบเหมือนกัน แต่ฟังก์ชัน strncmp จะกำหนดความยาวในการเปรียบเทียบได้ ซึ่งผลของฟังก์ชันที่จะส่งกลับมาให้จะมีดังนี้
- ถ้าทั้ง 2 สตริงเท่ากันจะส่งค่ากลับมาเป็น 0 โดยที่สตริงจะเท่ากัน ได้จะต้องมีความยาวที่เท่ากัน แบะมีตัวอักษรเหมือนกันทุกตัว ดังแสดงในรูปที่ 10-9
- ถ้าสตริงตัวแรกน้อยกว่าสตรองตัวที่สอง จะส่งค่ากลับเป็นค่าที่น้อยกว่า 0 โดยสตริง s1 จะน้อยกว่า s2 ก็เมื่อทำการเปรียบเทียบไปที่ละตัวอักษร แล้วพบว่าตัวอักษรใน s1 มีค่าน้อยกว่าตัวอักษรของ s2 (โดยเทียบจากรหัส ACSII) หรือจุดสิ้นสุดของ s1 อยู่ก่อน s2 ดังแสดงในรูปที่ 10-10
- ถ้าสตริงตัวแรกมากกว่าสตริงตัวที่สอง จะส่งค่ากลับเป็นค่าที่มากกว่า 0 สตริง s1 จะน้อยกว่า s2 ก็เมื่อทำการเปรียบเทียบไปที่ละตัวอักษรแล้วพบว่าตัวอักษรใน s1 มีค่ามากกว่าตัวอักษรของ s2 (โดยเทียบจากรหัส ACSII) หรือถ้าจุดสิ้นสุดของ s1 อยู่หลัง s2 ดังแสดงในรูปที่ 10-11
รูปที่ 10-9 แสดงการเปรียบเทียบสตริงที่ผลเป็นเท่ากัน
รูปที่ 10-10 แสดงการเปรียบเทียบสตริงที่ผลเป็นน้อยกว่า
รูปที่ 10-11 แสดงการเปรียบเทียบสตริงที่ผลเป็นมากกว่า
Strcmp ฟังก์ชัน strcmp การประกาศฟังก์ชันดังนี้
char *strcmp(const char *string1, const char *string2);Strcmp ฟังก์ชัน strcmp การประกาศฟังก์ชันดังนี้
ตัวอย่างด้านล่างนี้ เป็นตัวอย่างการใช้ฟังชัน strcmp
if (strcmp(str1,str2) = = 0)
/*ชุดคำสั่งเมื่อเท่ากัน*/
else
/*ชุดคำสั่ง เมื่อไม่เท่ากัน*/
Strncmp ฟังก์ชัน strncmp จะกำหนดความยาวในการเปรียบเทียบได้ การประกาศฟังก์ชันดังนี้
Char *strncmp (const char *string1,const char *string2,int size);
ในตารางที่ 10-1 แสดงผลของการเปรียบเทียบระหว่างสตริง 2 สตริง โดยใช้ฟังก์ชัน strncmp
ตารางที่ 10-1 แสดงผลของฟังก์ชัน strncmp
ต่อสตริง (strcat, strncat)
ฟังก์ชันที่ใช้ในการต่อสตริง มีฟังก์ชัน strcat และฟังก์ชัน strncat ซึ่งการทำงานของฟังก์ชันทั้งคือ จับสตริงชุดหนึ่งไปต่อท้ายกับสตริงอีกชุดหนึ่ง
strcat การประกาศฟังก์ชัน strcat เป็นดังนี้
char *strcat (const char *string1,const char *string2);
strncat การประกาศฟังก์ชัน strncat เป็นดังนี้
char *strncat (const char*string1,const char *string2,int size);

ไม่มีความคิดเห็น:
แสดงความคิดเห็น