หน่วยที่ 7 ตัวแปรชนิดอาร์เรย์ และข้อความ (สตริง)

หน่วยที่ 7 ตัวแปรชนิดอาร์เรย์ และข้อความ (สตริง) 

(Array and String)

ตัวแปรชนิดอาร์เรย์ (Array)

          ตัวแปรอาร์เรย์ (Array) หรือเรียกอีกชื่อหนึ่งว่าตัวแปรชุด เป็นการจองพื้นที่ในหน่วยความจำให้กับตัวแปร เพื่อให้ตัวแปรนั้นสามารถรับข้อมูลหรือเก็บข้อมูลได้มากกว่า 1 ค่า ข้อมูลทุกตัวที่อยู่ในอาร์เรย์จะต้องเป็นข้อมูลชนิดเดียวกันเท่านั้น และตัวแปรอาร์เรย์สามารถใช้งานได้เหมือนกับตัวแปรทั่วไป

         ตัวแปรอาร์เรย์ (Array) แบ่งได้เป็น 3 ชนิด

  • อาร์เรย์ชนิด 1 มิติ (One-Dimensional)
  • อาร์เรย์ชนิด 2 มิติ (Two-Dimensional)
  • อาร์เรย์ชนิด 3 มิติ (Three-Dimensional)

          สรุปได้ว่า อาร์เรย์คือกลุ่มข้อมูลชนิดเดียวกันเรียงต่อกันเป็นกลุ่มโดยใช้ชื่อตัวแปรร่วมกัน

          ข้อมูลชนิดอาร์เรย์จะประกอบด้วยข้อมูลหลายๆตัวรวมกันเป็นกลุ่ม ข้อมูลแต่ละตัวในกลุ่มนั้นจะเรียกว่าองค์ประกอบ หรืออีลีเมนต์(element) หรือเซลล์ (cell) ค่าแต่ละค่าจะถูกเก็บลงยังพื้นที่ของหน่วยความจำที่แตกต่างกัน พื้นที่ในหน่วยความจำจะใช้หมายเลขลำดับเป็นตัวจำแนกความแตกต่างของค่าตัวแปรแต่ละพื้นที่ด้วยการระบุหมายเลขลำดับที่เรียกว่า ดัชนี (Index) หรือหมายเลขอ้างอิงกำกับตามหลังชื่อตัวแปร โดยใช้หมายเลขลำดับตั้งแต่ 0, 1, 2, … เป็นต้นไป


          ตัวแปรอาร์เรย์ 1 มิติ (1-dimensional array) ลักษณะของตัวแปรอาร์เรย์ 1 มิติ จะเก็บข้อมูลต่อเรื่องเป็นแถว

          ตัวแปรอาร์เรย์ 1 มิติ มีโครงสร้างเทียบเท่าเมตริกซ์ขนาด nx1 การประกาศตัวแปรอาร์เรย์ จะใช้เครื่องหมาย [ ] ล้อมค่าตัวเลขจำนวนเต็ม เพื่อบอกจำนวนหน่วยข้อมูลที่ต้องการ

          รูปแบบตัวแปรอาร์เรย์ 1 มิติ

  • ชนิดของตัวแปร (data_type) ชื่อตัวแปร[จำนวนสมาชิกที่ต้องการ] (variable_name[number])              

หมายเหตุ

  • เริ่มนับจาก 0 สูตร x[n-1] เช่น int a[6] หมายถึงการแบ่งช่องเก็บข้อมูล เริ่มจาก a[0] จนถึง a[5]
  • (ขนาดของอาร์เรย์) ต้องระบุเป็นค่าคงที่เท่านั้น(จำนวนนับ)เป็นตัวแปรหรือนิพจน์ไม่ได้

ตัวอย่างตัวแปรอาร์เรย์ 1 มิติ เช่น
      int a[] คือ อาร์เรย์ที่ประกอบด้วยข้อมูลที่มีชนิดข้อมูลเป็นประเภท ตัวเลขจำนวนเต็ม
       char b[] คือ อาร์เรย์ที่ประกอบด้วยข้อมูลที่มีชนิดข้อมูลเป็นประเภท อักขระ

ตัวอย่างโปรแกรม การแสดงข้อมูลผ่านตัวแปรอาร์เรย์ 1 มิติ

  • #include <stdio.h>
  • int main()
  • {
  •           int i[5];
  •           int j;
  •           for(j=0;j<5;j++)
  •           {
  •              i[j] = j; // เอาข้อมูลไปเก็บใน array
  •           }
  •           for(j=0;j<5;j++)
  •           {
  •              printf("i[%d] = %d \n",j,i[j]); // เอาข้อมูลใน array ออกมาพิมพ์
  •           }
  • }

ตัวอย่าง การดูขนาดอาร์เรย์ 1 มิติในหน่วยไบต์ด้วยคำสั่ง sizeof()

  • #include <stdio.h>
  • int main()
  • {  int ages[10];    char name[50];
  •    double scores[20];
  •       printf("Size of ages =  %d\n",sizeof(ages));
  •   printf("Size of name = %d\n" ,sizeof(name));
  •   printf("Size of scores = %d\n",sizeof(scores));
  •   printf("Size of name[0]=%d\n" ,sizeof(name[0]));
  •   printf("Size of ages[0]=%d\n",sizeof(ages[0]));
  • }

          // หมายเหตุ ข้อควรระวังสำหรับการใช้งานอาร์เรย์ เมื่อประกาศตัวแปรอาร์เรย์และกำหนดขนาดของอาร์เรย์แล้ว เราอาจจะเขียนหรืออ่านเกินกว่าสมาชิกของอาร์เรย์ได้ โดยคอมไพเลอร์จะไม่แจ้งเตือนแต่อย่างใด แต่การเขียนข้อมูลเกินกว่าขนาดของอาร์เรย์ที่จองไว้จะทำให้ข้อมูลที่เขียนลงไปนั้นจะไปทับข้อมูลอื่นหรือไปทับส่วนของโปรแกรม อันจะทำให้การทำงานของโปรแกรมเสียหายได้

ตัวอย่างโปรแกรม การแสดงข้อความแบบอาร์เรย์ 1 มิติ

  • #include<stdio.h>
  • int main(void)
  • {
  •   char string[]="Hi there, Chip!";
  •   printf("New string is \"%s\".\n",string);
  •   return 0;
  • }

ตัวแปรชนิดข้อความ (สตริง) (String)

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

           รูปแบบการเก็บตัวแปรชนิดข้อความ (สตริง) (String)

          ประกาศชนิดอักขระ (char) ชื่อตัวแปรข้อความ[ความยาวของข้อความ] stringVariable[ length_of_string ]

          *** อาจไม่ต้องใส่จำนวนตัวเลขภายในวงเล็บบอกจำนวนสมาชิกก็ได้

ตัวอย่างการประกาศตัวแปรชนิดข้อความ (สตริง) (String) เช่น

  • char str1[]  = {‘A’, ‘B’, ‘C’, ‘D’, ‘\0’};
  • char str2[10] = {‘A’, ‘B’, ‘C’, ‘D’, ‘\0’}; 
  • char str3[]  = ”ABCD”;
  • char a[7] = “Hello!”;  //เก็บค่าตั้งแต่ a[0] จนถึง a[6] คือ a[0]=H , a[1]=e , a[2]=l , a[3]=l , a[4]=o , a[5]=! ,  a[6]=\0

          หมายเหตุ

  • การกำหนดค่าของอาร์เรย์ให้เป็นข้อความ จะไม่สามารถใช้โอเปอร์เรเตอร์ = ได้โดยตรง          
  • ถ้าต้องการเก็บข้อความใดๆ ลงในอาร์เรย์ ต้องใช้วิธีการเรียกใช้ฟังก์ชัน เช่น ฟังก์ชันมาตรฐานการคัดลอกข้อความ strcpy( ) ที่นิยามไว้ใน <string.h>

          ตัวอย่างโปรแกรม การกำหนดค่าของสตริงโดยใช้ฟังก์ชัน strcpy()

  • #include <stdio.h>
  • #include <string.h>
  • int main()
  • {
  •    char a[20] = "XXXXXXXXXX"; // 10 of X
  •    printf("%s\n", a);
  •    strcpy(a, "ABCD");
  •    printf("%s\n", a);
  •    strcpy(a, "0123456789");
  •    printf("%s\n", a);
  •    return 0;
  • }

          ตัวอย่างโปรแกรม การนับจำนวนตัวอักษรโดยเรียกใช้ฟังก์ชั่น strlen()

  • #include <stdio.h>
  • #include <string.h>
  • int main()
  • {
  •   char texts[4][20];
  •   int i;
  •   for(i=0;i<4;i++) {
  •     printf("Enter text %d : ",i+1);
  •     scanf("%s",&texts[i]);
  •   }
  •   for(i=0;i<4;i++)
  •     printf("%s : %d\n",texts[i],strlen(texts[i]));
  •   return 0;
  • }

          หมายเหตุ

  • ค่าคงที่ข้อความสตริงจะเขียนล้อมไว้ด้วยเครื่องหมายสองขีดหรือฟันหนู (”) และค่าคงที่ตัวอักษรจะเขียนล้อมไว้ด้วยเครื่องหมายขีดเดียว (')
  • การประกาศตัวแปรชนิดอาร์เรย์หากมีส่วนที่เหลือไม่ได้ใช้งานจะถูกเซ็ตเป็นศูนย์อัตโนมัติ เพราะส่วนที่เหลือยังไม่ได้การกำหนดค่าเริ่มต้นให้

ตัวอย่างโปรแกรม

ตัวอย่างโปรแกรม สร้างไฟล์ชื่อ program.txt พร้อมเก็บข้อความที่ต้องการโดยเก็บแบบอาร์เรย์ได้ 1000 อักษร

  • #include <stdio.h>
  • #include <stdlib.h>  /* For exit() function */
  • int main()
  • {
  •    char c[1000];
  •    FILE *fptr;
  •    fptr=fopen("program.txt","w");
  •    if(fptr==NULL) {
  •       printf("Error!");
  •       exit(1);
  •    }
  •    printf("Enter a sentence:\n");
  •    gets(c);
  •    fprintf(fptr,"%s",c);
  •    fclose(fptr);
  •    return 0;
  • }

          ตัวอย่างโปรแกรม อ่านข้อความจากไฟล์ชื่อ program.txt โดยอ่านแบบอาร์เรย์ได้ 1000 อักษร

  • #include <stdio.h>
  • #include <stdlib.h> /* For exit() function*/
  • int main()
  • {
  •    char c[1000];
  •    FILE *fptr;
  •    if ((fptr=fopen("program.txt","r"))==NULL){
  •        printf("Error! opening file");
  •        exit(1);         /* Program exits if file pointer returns NULL. */
  •    }
  •    fscanf(fptr,"%[^\n]",c);
  •    printf("Data from file:\n%s",c);
  •    fclose(fptr);
  •    return 0;
  • }