หน่วยที่ 6 อะเรย์ของอักขระ กาญจนา ทองบุญนาค สาขาวิชาคอมพิวเตอร์ คณะวิทยาศาสตร์และเทคโนโลยี
สตริง(String) ข้อมูลหลาย ๆ ตัวอักขระ หรือข้อความ เรียกว่า สตริง(String) การเตรียมพื้นที่ในการเก็บ ข้อความ จะต้องเผื่อไว้หนึ่งตำแหน่งเสมอ เช่น ประกาศตัว แปรเพื่อเก็บ ข้อความว่า “Mickey Mouse” จะต้องจองพื้นที่เท่ากับจำนวนตัวอักขระที่มี แล้วบวกด้วย 1 เสมอ นั่นคือการเก็บ ข้อมูลประเภทข้อความในหน่วยความจำจะมีการปะตัวอักษร Null หรือ ‘\0’ ต่อท้าย เพื่อให้รู้ว่าเป็นจุดสิ้นสุดของข้อความ ในตัวอย่างข้างต้นต้องจอง พื้นที่ขนาด 13 ตัวอักขระ กาญจนา ทองบุญนาค สาขาวิชาคอมพิวเตอร์
การประกาศตัวแปร M i c k e y M o u s e \0 การจองพื้นที่ดังกล่าวเหมือนการจองพื้นที่ข้อมูลประเภท อาเรย์ 1 มิติแต่เป็นอาเรย์ของ char คำสั่งใช้ประกาศตัวแปรคือ char message[13]; หากต้องการกำหนดค่าให้กับตัวแปร message คำสั่งคือ char message[ ] = “Mickey Mouse”; จำลองการเก็บข้อมูลดังกล่าวในหน่วยความจำได้ ดังรูป M i c k e y M o u s e \0 กาญจนา ทองบุญนาค สาขาวิชาคอมพิวเตอร์
การประกาศตัวแปร การเขียนโปรแกรมสามารถใช้พอยน์เตอร์ชี้ไปที่ค่าคงที่ สตริงใด ๆ ก็ได้ เช่น char *pmessage = “Hello, world”; pmessage เป็นตัวแปรชนิดตัวชี้ประเภท char ชี้ไปที่ อาเรย์ของตัวอักษร แตกต่างจากการใช้อาเรย์ทั่วไป เช่น char amessage[ ] = “Hello, world”; กาญจนา ทองบุญนาค สาขาวิชาคอมพิวเตอร์
การกำหนดค่าให้กับตัวแปรชนิดสตริง การกำหนดค่าของอาร์เรย์ให้เป็นข้อความ จะไม่สามารถใช้ โอเปอร์เรเตอร์ = ได้โดยตรง เช่น char a[20]; a = “Hello World!”; ถ้าต้องการเก็บข้อความใดๆ ลงในอาร์เรย์ ต้องใช้วิธีการเรียกใช้ฟังก์ชัน เช่น ฟังก์ชันมาตรฐาน strcpy( ) ที่นิยามไว้ใน <string.h> หรือ char a[ ] = “Hello World!”; กาญจนา ทองบุญนาค สาขาวิชาคอมพิวเตอร์
ตัวอย่างการรับ / แสดงค่าของสตริง #include <stdio.h> #include <conio.h> #include <string.h> #include <ctype.h> void main(void) { int i=0,j=0; char ans,name[3][20]; clrscr(); printf("\tInput Name\n"); do { printf("%d: ",i+1); gets(name[i]); i++; printf("Data More [N/n] = Stop [Enter] = Continue: "); ans=getche(); printf("\n"); } while (toupper(ans)!='N'); printf("\n\tYou Input\n"); while (j<i) { printf("Name %d : %s\n",j+1,name[j]); j++; } getch(); กาญจนา ทองบุญนาค สาขาวิชาคอมพิวเตอร์
ฟังก์ชันมาตรฐาน (standard function) ของ string ภาษาซี ได้เตรียมฟังก์ชันมาตรฐานการทำงานที่เกี่ยวข้องกับ string ซึ่งพบใน Compiler ของภาษา C ทั่วไป ก่อนจะใช้งานฟังก์ชันมาตราฐานเหล่านี้จะต้องเรียก ไฟล์ string.h ใน library ด้วยคำสั่ง #include <string.h> ตัวอย่าง ฟังก์ชันมาตราฐานของสตริง ดังนี้ กาญจนา ทองบุญนาค สาขาวิชาคอมพิวเตอร์
strcat(s1,s2) main() { char s1[ ] = “Computer"; โดย s1 s2 เป็นข้อความที่ต้องการเชื่อมต่อกันและผลลัพธ์ที่ได้จะเก็บไว้ใน s1 #include <stdio.h> #include <conio.h> #include <string.h> จากตย. ผลคือ ComputerScience main() { char s1[ ] = “Computer"; char s2[ ] = “Science"; strcat(s1,s2); printf("%s",s1); getchr(); } กาญจนา ทองบุญนาค สาขาวิชาคอมพิวเตอร์
strlen(s) คืนจำนวนตัวอักขระใน string s ที่อยู่ก่อนตัวอักขระ Null หรือ ‘\0’ โดย s เป็นข้อความที่ต้องการหาความยาว ฟังก์ชัน strlen() ใช้หาความยาวของข้อความ จากตย. ผลคือ 8 7 main() { char s1[ ] = “Computer”; char s2[ ] = “Science”; printf("%d\n",strlen(s1)); printf("%d",strlen(s2)); getch( ); } กาญจนา ทองบุญนาค สาขาวิชาคอมพิวเตอร์
strcpy(s1,s2) คัดลอกข้อความจาก string s2 ไปยัง string s1 #include <stdio.h> จากตย. ผลคือ XYZ #include <conio.h> CMU #include <string.h> void main() { char s1[ ] = "ABCDEF"; char s2[ ] = "XYZ"; strcpy(s1,s2); printf("%s",s1); strcpy(s2, “CMU”);printf (“%s”,s2); } กาญจนา ทองบุญนาค สาขาวิชาคอมพิวเตอร์
strcmp(s1,s2) #include <stdio.h> #include <conio.h> #include <string.h> void main() { char s1[ ] = "ABCDEF"; char s2[ ] = "XYZ"; if (strcmp(s1,s2)!=0) printf("Not equal"); else printf("Equal"); } s1,s2 เป็นข้อความที่นำมาเปรียบเทียบกัน ผลการเปรียบเทียบ ถ้า s1<s2 จะได้ค่าน้อยกว่าศูนย์ ถ้า s1=s2 จะได้ค่าศูนย์ ถ้า s1>s2 จะได้ค่ามากกว่าศูนย์ จากตย. ผลคือได้ค่าเงื่อนไขเป็นจริง กาญจนา ทองบุญนาค สาขาวิชาคอมพิวเตอร์
แบบฝึกหัด เขียนโปรแกรมเพื่อตรวจสอบว่าข้อความที่รับเข้ามา เป็น palindrome หรือไม่ ตย. ของคำที่เป็น palindrome เช่น radar, rotator, reviver, eye, payap