หน่วยที่ 5 ตัวแปรชุดและสตริง
ในบทที่ผ่านมาหลายบทก่อนหน้านี้ได้พูดถึงตัวแปรชนิดต่าง ๆ หลายชนิด สำหรับเนื้อหาในบทนี้ จะได้เรียนรู้เกี่ยวกับตัวแปรอีกชนิดหนึ่งนั่นคือตัวแปรชุด (arrays) และเนื้อหาเกี่ยวกับสตริง (string) ซึ่งเป็นพื้นฐานที่สำคัญในการจัดเก็บข้อมูลและโครงสร้างของข้อมูลโดยเฉพาะอย่างยิ่งตัวแปรชุดมีประโยชน์หลายประการดังนี้
1) ช่วยลดการตั้งชื่อซ้ำ ๆ กัน เช่น ต้องการเก็บค่าตัวเลขจำนวนเต็ม 100 ตัว ถ้าไม่มีการใช้ตัวแปรชุด เราจะต้องประกาศตัวแปรถึง 100 ตัว ดังนี้
int k1, k2, k3, …, k100; /* ประกาศตัวแปร k1, k2, k3, …, k100 จำนวน 100 ตัว */ แต่ถ้าเราใช้ตัวแปรชุดมาช่วยในการเก็บข้อมูลตัวเลขชุดนี้ เราสามารถเก็บตัวเลข 100 ตัวนี้ไว้ในชื่อเดียวกัน แต่มีตัวเลข subscript คอยกำกับเพื่อบ่งบอกถึงลำดับที่ของข้อมูลในตัวแปรได้
int k[100]; /* ประกาศตัวแปรชุด 1 ตัว คือชื่อตัวแปร k */
2) ช่วยในการจัดเก็บข้อมูลแบบตาราง (table) โดยสามารถใช้ตัวแปรชุด 2 มิติ มาเก็บข้อมูลได้
3) ช่วยในการเขียนโปรแกรมมีประสิทธิภาพมากขึ้น เนื่องจากในโปรแกรมที่มีการใช้ตัวแปรชุดจะมีตัวแปรน้อยลง ช่วยในการจัดเรียงข้อมูล และค้นหาข้อมูลได้สะดวกและรวดเร็ว
5.1 ตัวแปรชุด (arrays variables)
ตัวแปรชุด คือ ตัวแปรชนิดหนึ่งที่ใช้ชื่อเพียงชื่อเดียวแต่มีตัวเลขแสดงตำแหน่งกำกับไว้ (subscript) เพื่อเป็นการบอกว่าเป็นสมาชิกของตัวแปรชุดตัวที่เท่าไหร
5.1.1 ประเภทของตัวแปรชุด มีดังนี้
1) ตัวแปรชุด 1 มิติ (one dimension arrays หรือ single dimension arrays) ตัวแปรชุด 1 มิติ คือ ตัวแปรชุดที่มีตัวเลขกำกับ (subscript) เพียง 1 ตัว เช่น a[20], b[100], name[30] และ salary[20] เป็นต้น
2) ตัวแปรชุดหลายมิติ (multi-dimension arrays) ตัวแปรชุดหลายมิติ คือ ตัวแปรชุดที่มีตัวเลขกำกับ (subscript) ตั้งแต่ 2 ตัวขึ้นไป โดยมากจะสนใจศึกษาตัวแปรชุดที่มีตัวเลขกำกับ 2 ตัว และ 3 ตัว ดังนี้
ตัวแปรชุด 2 มิติ (two dimension arrays) คือ ตัวแปรชุดที่มีตัวเลขกำกับ (subscript) เพียง 2 ตัว เช่น a[2][4], b[3][4], name[5][30] เป็นต้น
ตัวแปรชุด 3 มิติ (three dimension arrays) คือ ตัวแปรชุดที่มีตัวเลขกำกับ (subscript) เพียง 3 ตัว เช่น a[2][3][4], b[3][4][5] เป็นต้น
5.1.2 การประกาศตัวแปรชุด (declaration of arrays) สามารถทำได้ดังนี้
1) การประกาศตัวแปรชุด 1 มิติ (declaration of one dimension arrays)
โดยที่
type คือ ชนิดของตัวแปรชุด เช่น int, float, char, double เป็นต้น
arrayname คือ ชื่อตัวแปรชุด ตั้งขึ้นตามหลักการตั้งชื่อตัวแปร
size คือ ขนาดของตัวแปรชุดเป็นตัวเลขจำนวนเต็ม
ตัวอย่างการประกาศตัวแปรชุด 1 มิติ
ตัวอย่างที่ 5.1 int s[20]; ภายในหน่วยความจำจะมีการจองเนื้อที่ไว้ดังนี้
การจองเนื้อที่ใช้ช่องละ 2 bytes 20 ช่อง รวมกันทั้งหมดใช้เนื้อที่ 40 bytes
ตัวอย่างที่ 5.2 char p[20]; ภายในหน่วยความจำจะมีการจองเนื้อที่ไว้ดังนี้
การจองเนื้อที่ใช้ช่องละ 1 bytes 20 ช่อง รวมกันทั้งหมดใช้เนื้อที่ 20 bytes
ตัวอย่างที่ 5.3 float t[20]; ภายในหน่วยความจำจะมีการจองเนื้อที่ไว้ดังนี้
การจองเนื้อที่ใช้ช่องละ 4 bytes 20 ช่อง รวมกันทั้งหมดใช้เนื้อที่ 80 bytes
2) การประกาศตัวแปรชุด 2 มิติ (declaration of two dimension arrays)
โดยที่
type คือ ชนิดของตัวแปรชุด เช่น int, float, char, double เป็นต้น
arrayname คือ ชื่อตัวแปรชุด ตั้งขึ้นตามหลักการตั้งชื่อตัวแปร
n คือ ตัวเลขที่ใช้แสดงตำแหน่งแถว (row) มีค่าตั้งแต่ 0, 1, 2, …, n-1
m คือ ตัวเลขที่ใช้แสดงตำแหน่งคอลัมน์ (column) มีค่าตั้งแต่ 0, 1, 2, …, m-1
ตัวอย่างการประกาศตัวแปรชุด 2 มิติ
ตัวอย่างที่ 5.4 int r[3][2]; ภายในหน่วยความจำจะมีการจองเนื้อที่ไว้ดังนี้
การจองเนื้อที่ของตัวแปรชุด 2 มิติ จะมีลักษณะเป็นตาราง (table) มีจำนวนแถว n = 0, 1, 2 และมีจำนวนคอลัมน์ m = 0, 1 โดยที่ในตารางจะมีลักษณะเป็นช่อง ๆ ซึ่งแต่ละช่องก็คือพื้นที่ของสมาชิกแต่ละตัว โดยใช้เนื้อที่ช่องละ 2 bytes มีสมาชิกทั้งหมด 6 ตัว ดังนั้นใช้เนื้อที่ทั้งหมด 12 bytes
วิธีการหาจำนวนสมาชิกทั้งหมดของตัวแปรชุด 1 มิติ และ 2 มิติ
การหาจำนวนสมาชิกทั้งหมดของตัวแปรชุด สามารถคำนวณได้จากสูตรดังนี้
กรณีตัวแปรชุด 1 มิติ
จำนวนสมาชิกทั้งหมดของตัวแปรชุด = ขนาดของตัวแปรชุด (size)
กรณีตัวแปรชุด 2 มิติ
จำนวนสมาชิกทั้งหมดของตัวแปรชุด = n*m
จากตัวอย่าง int r[3] [2]; จะได้ว่า n = 3, m = 2 ดังนั้น จำนวนสมาชิกของตัวแปรชุด = 3*2 = 6 แสดงว่าตัวแปรชุดนี้มีสมาชิกดังนี้ r[0][0], r[0][1], r[n-1][m-1] รวมทั้งหมด 6 สมาชิก
ตัวอย่างที่ 5.5 float X[5] [4]; ภายในหน่วยความจำจะมีการจองเนื้อที่ไว้ดังนี้
การจองเนื้อที่จะมีลักษณะเป็นตาราง (table) มีจำนวนแถว n = 0, 1, 2, 3, 4 และมีจำนวนคอลัมน์ m = 0, 1, 2, 3 โดยที่ในตารางใช้เนื้อที่ช่องละ 4 bytes มีจำนวนทั้งหมด 20 ตัว ดังนั้นใช้เนื้อทั้งหมด 80 bytes
3) การประกาศตัวแปรชุด 3 มิติ (declaration of three dimension arrays)
type arrayname [n] [m] [p];
โดยที่
type คือ ชนิดของตัวแปรชุด เช่น int, float, char, double เป็นต้น
arrayname คือ ชื่อตัวแปรชุดตั้งขึ้นตามหลักการตั้งชื่อตัวแปร
n คือ ตัวเลขกำกับตัวที่ 1 มีค่าตั้งแต่ 0, 1, 2, …., n-1
m คือ ตัวเลขกำกับตัวที่ 2 มีค่าตั้งแต่ 0, 1, 2, …., m-1 p คือ ตัวเลขกำกับตัวที่ 3 มีค่าตั้งแต่ 0, 1, 2, …., p-1
วิธีการหาจำนวนสมาชิกทั้งหมดในตัวแปรชุด 3 มิติ หาได้จากสูตรดังนี้
จำนวนสมาชิกทั้งหมดของตัวแปรชุด = n*m*p
ตัวอย่างการประกาศตัวแปรชุด 3 มิติ float a[2][2][3]; ดังนั้น n = 2 , m = 2, p = 3 จะได้ว่าจำนวนสมาชิกทั้งหมดของตัวแปรชุด = 2*2*3 = 12 ตัว
ดังนั้นเราสามารถเขียนสมาชิกทั้งหมดของตัวแปรชุดนี้ได้ดังตาราง
Column 0 Column 1
ตัวที่ 1 ตัวที่ 2 ตัวที่ 3 ตัวที่ 1 ตัวที่ 2 ตัวที่ 3
Row 0 a[0][0][0] a[0][0][1] a[0][0][2] a[0][1][0] a[0][1][1] a[0][1][2]
Row 1 a[1][0][0] a[1][0][1] a[1][0][2] a[1][1][0] a[1][1][1] a[1][1][2]
โดยที่สมาชิกแต่ละตัวใช้เนื้อที่ตัวละ 4 bytes จำนวนสมาชิกทั้งหมดมี 12 ตัว ดังนั้นใช้เนื้อที่ทั้งหมดคือ 4*12 = 48 bytes
5.1.3 การกำหนดค่าเริ่มต้นให้กับตัวแปรชุด (initializing arrays)
1) การกำหนดค่าตัวเลขให้กับตัวแปรชุด
รูปแบบที่ 1 (กรณีตัวแปรชุด 1 มิติ)
type arrayname[size] = { value list };
รูปแบบที่ 2 (กรณีตัวแปรชุด 2 มิติ)
type arrayname[n][m] = { value list };
โดยที่
value list คือ ค่าคงที่ชนิดตัวเลขที่ต้องการกำหนดให้ตัวแปรชุด ถ้ามีหลายค่าให้ใช้เครื่องหมาย , (comma) คั่นระหว่างค่าคงที่แต่ละค่า
โดยค่าคงที่ทั้งหมดจะต้องอยู่ภายใต้เครื่องหมาย { }
ตัวอย่าง 5.6 int a[10] = {10, 20, 30, 40,50, 60, 70, 80, 90, 100};
ภายในหน่วยความจำจะเก็บตัวแปรชุดดังนี้
ตัวอย่างที่ 5.7 float p[5][3] = {
3.0, 4.5, 5.5,
4.6, 5.5, 6.5,
5.0, 6.2, 7.0,
6.3, 6.8, 7.4,
7.5, 8.0, 9.0
};
ภายในหน่วยความจำจะเก็บตัวแปรชุดเป็นลักษณะตาราง (table) ดังนี้
โดยที่สมาชิกแต่ละตัวใช้เนื้อที่ 4 bytes ดังนั้นใช้เนื้อที่ทั้งหมด = 4*15 = 60 bytes
2) การกำหนดค่าคงที่ชนิดสตริงให้กับตัวแปรสตริง
รูปแบบที่ 1 (กรณีตัวแปรชุด 1 มิติ)
char arrayname[size] = “string constant”;
รูปแบบที่ 2 (กรณีตัวแปรชุด 2 มิติ)
char arrayname[n][m] = {“string constant”};
โดยที่
string constants คือ ค่าคงที่ชนิดสตริงที่ต้องการกำหนดให้ตัวแปรชุด ถ้ามีหลายค่าจะต้องใช้เครื่องหมาย , (comma) คั่นระหว่างค่าคงที่แต่ละค่า
ตัวอย่างที่ 5.8 char s[12] = “ASIAN GAME” ;
ภายในหน่วยความจำจะเก็บข้อมูลตัวแปรชุดมีลักษณะดังนี้
null character
ตัวอย่างที่ 5.9 char province[3][13] = {
“NAKHONPANOM” ,
“SAKON NAKHON” ,
“MOOKDAHAN” } ;
ภายในหน่วยความจำจะเก็บข้อมูลมีลักษณะดังนี้
ทั้งหมดใช้เนื้อที่ 3 x 13 = 39 bytes
การอ้างถึงสมาชิกในตัวแปรชุด 2 มิติ
เช่น
province [0] คือ สมาชิกแถวที่ 1 ทั้งแถว นั่นคือข้อมูล NAKHONPANOM
province [1] คือ สมาชิกแถวที่ 2 ทั้งแถว นั่นคือข้อมูล SAKON NAKHON province [2] คือ สมาชิกแถวที่ 3 ทั้งแถว นั่นคือข้อมูล MOOKDAHAN
province [0][0] คือ สมาชิกของ province [0] ตัวที่ 1 คือตัวอักษร N
province [1][2] คือ สมาชิกของ province [1] ตัวที่ 3 คือตัวอักษร K
5.1.4 การนำข้อมูลเข้าไปเก็บและการแสดงผลลัพธ์ของข้อมูลในตัวแปรชุด
โดยปกติเราจะใช้คำสั่ง for หรือ while หรือ do while คำสั่งใดคำสั่งหนึ่งมาช่วยในการนำข้อมูลเข้าเก็บและแสดงผลลัพธ์ข้อมูลในตัวแปรชุด ส่วนมากนิยมใช้คำสั่ง for มากกว่าคำสั่งอื่นทั้งนี้เนื่องจากตัวแปรชุดนั้นเราสามารถทราบขนาดที่แน่นอนได้ ทำให้กำหนดจำนวนรอบการทำงานได้
เพื่อความเข้าใจเกี่ยวกับการนำข้อมูลเข้าไปเก็บและการแสดงผลลัพธ์ของตัวแปรชุดมากยิ่งขึ้น ให้ศึกษาโปรแกรมตัวอย่างที่ 5.1, 5.2, 5.3 และ 5.4 ดังต่อไปนี้
โปรแกรมตัวอย่างที่ 5.1 แสดงการใช้ตัวแปรชุด 1 มิติ ชื่อ scores เก็บคะแนนนักเรียน
/* array1.C */
#include<stdio.h> /* บรรทัดที่ 1 */
#include<conio.h> /* บรรทัดที่ 2 */
/* Record student's scores. */ /* บรรทัดที่ 3 */
main() /* บรรทัดที่ 4 */
{ /* บรรทัดที่ 5 */
int index, scores[5]; /* บรรทัดที่ 6 */
scores[0] = 59; /* บรรทัดที่ 7 */
scores[1] = 67; /* บรรทัดที่ 8 */
scores[2] = 85; /* บรรทัดที่ 9 */
scores[3] = 92; /* บรรทัดที่ 10 */
scores[4] = 74; /* บรรทัดที่ 11 */
clrscr(); /* บรรทัดที่ 12 */
for (index = 0; index < 5; index++) /* บรรทัดที่ 13 */
printf("Student's score: %d\n", scores[index]); /* end for */ /* บรรทัดที่ 14 */
getch(); /* บรรทัดที่ 15 */
return(0); /* บรรทัดที่ 16 */
} /* บรรทัดที่ 17 */
ผลลัพธ์ที่ได้จากโปรแกรม
คำอธิบายโปรแกรม
จากโปรแกรมตัวอย่างที่ 5.1 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังนี้
บรรทัดที่ 6 ประกาศตัวแปร index เป็นชนิดจำนวนเต็ม และ scores เป็นตัวแปรชุด 1 มิติ ชนิดจำนวนเต็มมีสมาชิก 5 ตัว
บรรทัดที่ 7 ถึง 11 กำหนค่าจำนวนเต็มให้กับตัวแปรชุด scores[0] ถึง scores[4]
บรรทัดที่ 13 คำสั่ง for ทำหน้าที่วนรอบทำงานซ้ำ 5 ครั้ง เพื่อช่วยพิมพ์คะแนนนักเรียนที่เก็บไว้ในตัวแปรชุด scores[0] ถึง scores[4]
บรรทัดที่ 14 และ 15 ฟังก์ชัน printf( ) เพื่อแสดงคะแนนของนักเรียนแต่ละคนออกที่จอภาพซึ่งเก็บไว้ในตัวแปรชุด scores[0] ถึง scores[4] หลังจากนั้นจะหยุดรอรับค่าใด ๆ จากคีย์บอร์ด ซึ่งถ้ากด enter ก็จะกลับสู่โปรแกรม
บรรทัดที่ 16 ส่งค่า 0 (ศูนย์) กลับให้กับฟังก์ชัน main( )
ข้อสังเกต ฟังก์ชัน main( ) ของโปรแกรมตัวอย่างที่ 5.1 เป็นฟังก์ชันที่ต้องการให้ส่งค่ากลับ ในการเขียนโปรแกรมจะต้องมีการใช้ฟังก์ชัน return( ) ซึ่งถ้าไม่ใช้เวลาที่เรา compile โปรแกรม จะมีคำเตือนให้เราทราบทุกครั้ง แต่โปรแกรมก็สามารถ run ได้
โปรแกรมตัวอย่างที่ 5.2 แสดงการใช้ตัวแปรชุด 1 มิติ สำหรับเก็บข้อมูลและนำข้อมูลในตัวแปรชุดมาคำนวณค่า พร้อมทั้งแสดงผลลัพธ์ที่ได้ออกจอภาพ
/* array2.c */
#include<stdio.h> /* บรรทัดที่ 1 */
#include<conio.h> /* บรรทัดที่ 2 */
#include<stdlib.h> /* บรรทัดที่ 3 */
void main(void) /* บรรทัดที่ 4 */
{ float num[100] ; /* บรรทัดที่ 5 */
float sum= 0 , average ; /* บรรทัดที่ 6 */
int i, n ; char numstr[20]; /* บรรทัดที่ 7 */
clrscr(); /* บรรทัดที่ 8 */
printf("Enter Total of number(n<100) : "); /* บรรทัดที่ 9 */
n = atoi(gets(numstr)); /* บรรทัดที่ 10 */
/* ===== Input Data ===== */ /* บรรทัดที่ 11*/
for( i=0; i<n; i++) { /* บรรทัดที่ 12 */
printf("\nEnter NUMBER #%d : ",i+1); /* บรรทัดที่ 13 */
num[i] = atof(gets(numstr)); /* บรรทัดที่ 14 */
sum=sum+num[i]; /* บรรทัดที่ 15 */
printf("\n"); /* บรรทัดที่ 16 */
} /* end for */ /* บรรทัดที่ 17 */
/* ===== Calulate MEAN ===== */ /* บรรทัดที่ 18 */
average = sum/n ; /* บรรทัดที่ 19 */
printf("N =%d\t Sum =%10.2f\n",n,sum); /* บรรทัดที่ 20 */
printf("Average = %10.2f\n",average); /* บรรทัดที่ 21 */
getch(); /* บรรทัดที่ 22 */
} /* end main */ /* บรรทัดที่ 23 */
ผลลัพธ์ที่ได้จากโปรแกรม
คำอธิบายโปรแกรม
จากโปรแกรมตัวอย่างที่ 5.2 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังน
บรรทัดที่ 3 คำสั่ง #include <stdlib.h> ให้การสนับสนุนฟังก์ชัน atoi( ) และฟังก์ชัน atof( ) สำหรับโปรแกรมนี้ ในบรรทัดที่ 10 และ 14 ตามลำดับ
บรรทัดที่ 5 ประกาศตัวแปร num เป็นตัวแปรชุด 1 มิติ ชนิด float มีสมาชิก 100 ตัว
บรรทัดที่ 7 ประกาศตัวแปร numstr เป็นตัวแปรชุด 1 ติ ชนิด char มีสมาชิก 20 ตัว
บรรทัดที่ 10 ฟังก์ชัน atoi( ) ใช้เปลี่ยน string เป็นตัวเลขจำนวนเต็ม จากฟังก์ชัน gets( ) รับตัวอักขระมาเก็บไว้ในตัวแปร numstr แล้วเปลี่ยนค่า string ของตัวแปร numstr ไปเก็บไว้ในตัวแปร n โดยใช้ฟังก์ชัน atoi( )
บรรทัดที่ 12 คำสั่ง for ช่วยในการเก็บข้อมูลไว้ในตัวแปรชุด num ซึ่งมีจำนวนรอบของการทำงานเท่ากับจำนวนสมาชิกของตัวแปรชุด คือ n รอบ
บรรทัดที่ 14 ฟังก์ชัน atof( ) ใช้เปลี่ยน string เป็นตัวเลขทศนิยม ซึ่งมีการทำงานคล้ายกับฟังก์ชัน atoi( ) ในบรรทัดที่ 10
บรรทัดที่ 15 คำสั่ง sum = sum + num[i]; เป็นการบวกสะสมค่าตัวแปรชุด
บรรทัดที่ 18 ถึง 21 คำสั่ง average = sum/n; เป็นการคำนวณค่าเฉลี่ยของตัวแปรชุด แล้วแสดงผลค่าตัวแปร n ตัวแปร sum และตัวแปร average ออกจอภาพ
บรรทัดที่ 22 หยุดรอรับค่าใด ๆ จากคีย์บอร์ด ซึ่งถ้าเรากด enter ก็จะกลับสู่โปรแกรม
โปรแกรมตัวอย่างที่ 5.3 แสดงการใช้ตัวแปรชุด 2 มิติ สำหรับเก็บคะแนนและคำนวณค่าเฉลี่ยของคะแนนในแต่ละชุดแสดงผลออกจอภาพ
/* array3.C */
#include<stdio.h> /* บรรทัดที่ 1 */
#include<conio.h> /* บรรทัดที่ 2 */
/* Record student's score */
main() /* บรรทัดที่ 3 */
{ /* บรรทัดที่ 4 */
int i, j, sum, scores[3][5] = { /* บรรทัดที่ 5 */
{ 84 , 71 , 96 , 65 , 79 }, /* บรรทัดที่ 6 */
{ 90 , 55 , 83 , 68 , 96 }, /* บรรทัดที่ 7 */
{ 61 , 77 , 82 , 94 , 59 } /* บรรทัดที่ 8 */
}; /* บรรทัดที่ 9 */
clrscr(); /* บรรทัดที่ 10 */
for (i = 0; i < 3; i++){ /* loop over tests. */ /* บรรทัดที่ 11 */
for (j = 0, sum = 0; j < 5; j++) /* บรรทัดที่ 12 */
sum = sum + scores[i][j]; /* บรรทัดที่ 13 */
printf("Average for test %d is %f.\n", i, (float) sum / 5); /* บรรทัดที่ 14 */
} /* end for */ /* บรรทัดที่ 15 */
getch(); /* บรรทัดที่ 16 */
return(0); /* บรรทัดที่ 17 */
} /* บรรทัดที่ 18 */
ผลลัพธ์ที่ได้จากโปรแกรม
คำอธิบายโปรแกรม
จากโปรแกรมตัวอย่างที่ 5.3 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังนี้
บรรทัดที่ 5 ถึง 9 ประกาศตัวแปรชุด 2 มิติ ชนิดจำนวนเต็มของตัวแปรชื่อ scores มีจำนวนสมาชิกทั้งหมด 15 ตัว
บรรทัดที่ 11 คำสั่ง for เพื่อตรวจสอบว่า loop เกินจำนวนรอบ คือ แถวของตัวแปรชุดหรือไม่
บรรทัดที่ 12 คำสั่ง for เพื่อนำคะแนนที่เก็บในตัวแปรชุดทั้ง 15 ตัวมารวมกัน ในคำสั่งบรรทัดที่ 13
บรรทัดที่ 14 พิมพ์คะแนนเฉลี่ยของนักเรียนทั้ง 5 คน ในการสอบแต่ละครั้ง โดยที่ (float) sum/5 เป็นการทำให้ตัวแปร sum เป็นจำนวนทศนิยมชั่วคราว เพราะปกติเราประกาศตัวแปร sum เป็นชนิดจำนวนเต็ม
บรรทัดที่ 15 หยุดรอรับค่าใด ๆ จากคีย์บอร์ด ซึ่งถ้าเรากด enter ก็จะกลับสู่โปรแกรม
โปรแกรมตัวอย่างที่ 5.4 แสดงการใช้ตัวแปรชุด 2 มิติ สำหรับเก็บชื่อจังหวัด แล้วนำข้อมูลมาแสดงออกที่จอภาพ
/* array4.c */
#include<stdio.h> /* บรรทัดที่ 1 */
#include<conio.h> /* บรรทัดที่ 2 */
#include<stdlib.h> /* บรรทัดที่ 3 */
void main(void) /* บรรทัดที่ 4 */
{ /* บรรทัดที่ 5 */
char province[100][40]; /* บรรทัดที่ 6 */
int i, n; char numstr[20]; /* บรรทัดที่ 7 */
clrscr( ); /* บรรทัดที่ 8 */
printf("Enter Total of Province (n<100) : " ); /* บรรทัดที่ 9 */
n = atoi(gets(numstr)); /* บรรทัดที่ 10 */
for( i=0; i<n; i++) { /* บรรทัดที่ 11 */
printf("\nEnter your Province : "); /* บรรทัดที่ 12 */
gets( province[i] ) ; /* บรรทัดที่ 13 */
} /* บรรทัดที่ 14 */
for( i=0; i<n; i++) /* บรรทัดที่ 15 */
printf("\nYour Province is %s", province[i]); /* บรรทัดที่ 16 */
getch(); /* บรรทัดที่ 17 */
} /* end main */ /* บรรทัดที่ 18 */
ผลลัพธ์ที่ได้จากโปรแกรม
คำอธิบายโปรแกรม
จากโปรแกรมตัวอย่างที่ 5.4 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังนี้
บรรทัดที่ 3 คำสั่ง #include <stdlib.h> ให้การสนับสนุนฟังก์ชัน atoi( ) เพื่อเปลี่ยนข้อมูลสตริงเป็นชนิดจำนวนเต็ม ซึ่งเรียกใช้ฟังก์ชันนี้ ในบรรทัดที่ 10
บรรทัดที่ 11 คำสั่ง for เพื่อนำค่าสตริงที่รับเข้ามาไปเก็บไว้ในตัวแปรชุด province[i] ในคำสั่งบรรทัดที่ 13
บรรทัดที่ 15 คำสั่ง for เพื่อนำค่าสตริงที่เก็บไว้ในตัวแปร province[i] ออกแสดงที่จอภาพ ตามคำสั่ง บรรทัดที่ 16
บรรทัดที่ 17 หยุดรอรับค่าใด ๆ จากคีย์บอร์ด ซึ่งถ้าเรากด enter ก็จะกลับสู่โปรแกรม
บทที่ 5
ตัวแปรชุดและสตริง
ในบทที่ผ่านมาหลายบทก่อนหน้านี้ได้พูดถึงตัวแปรชนิดต่าง ๆ หลายชนิด สำหรับเนื้อหาในบทนี้ จะได้เรียนรู้เกี่ยวกับตัวแปรอีกชนิดหนึ่งนั่นคือตัวแปรชุด (arrays) และเนื้อหาเกี่ยวกับสตริง (string) ซึ่งเป็นพื้นฐานที่สำคัญในการจัดเก็บข้อมูลและโครงสร้างของข้อมูลโดยเฉพาะอย่างยิ่งตัวแปรชุดมีประโยชน์หลายประการดังนี้
1) ช่วยลดการตั้งชื่อซ้ำ ๆ กัน เช่น ต้องการเก็บค่าตัวเลขจำนวนเต็ม 100 ตัว ถ้าไม่มีการใช้ตัวแปรชุด เราจะต้องประกาศตัวแปรถึง 100 ตัว ดังนี้
int k1, k2, k3, …, k100; /* ประกาศตัวแปร k1, k2, k3, …, k100 จำนวน 100 ตัว */ แต่ถ้าเราใช้ตัวแปรชุดมาช่วยในการเก็บข้อมูลตัวเลขชุดนี้ เราสามารถเก็บตัวเลข 100 ตัวนี้ไว้ในชื่อเดียวกัน แต่มีตัวเลข subscript คอยกำกับเพื่อบ่งบอกถึงลำดับที่ของข้อมูลในตัวแปรได้
int k[100]; /* ประกาศตัวแปรชุด 1 ตัว คือชื่อตัวแปร k */
2) ช่วยในการจัดเก็บข้อมูลแบบตาราง (table) โดยสามารถใช้ตัวแปรชุด 2 มิติ มาเก็บข้อมูลได้
3) ช่วยในการเขียนโปรแกรมมีประสิทธิภาพมากขึ้น เนื่องจากในโปรแกรมที่มีการใช้ตัวแปรชุดจะมีตัวแปรน้อยลง ช่วยในการจัดเรียงข้อมูล และค้นหาข้อมูลได้สะดวกและรวดเร็ว
5.1 ตัวแปรชุด (arrays variables)
ตัวแปรชุด คือ ตัวแปรชนิดหนึ่งที่ใช้ชื่อเพียงชื่อเดียวแต่มีตัวเลขแสดงตำแหน่งกำกับไว้ (subscript) เพื่อเป็นการบอกว่าเป็นสมาชิกของตัวแปรชุดตัวที่เท่าไหร
5.1.1 ประเภทของตัวแปรชุด มีดังนี้
1) ตัวแปรชุด 1 มิติ (one dimension arrays หรือ single dimension arrays) ตัวแปรชุด 1 มิติ คือ ตัวแปรชุดที่มีตัวเลขกำกับ (subscript) เพียง 1 ตัว เช่น a[20], b[100], name[30] และ salary[20] เป็นต้น
2) ตัวแปรชุดหลายมิติ (multi-dimension arrays) ตัวแปรชุดหลายมิติ คือ ตัวแปรชุดที่มีตัวเลขกำกับ (subscript) ตั้งแต่ 2 ตัวขึ้นไป โดยมากจะสนใจศึกษาตัวแปรชุดที่มีตัวเลขกำกับ 2 ตัว และ 3 ตัว ดังนี้
ตัวแปรชุด 2 มิติ (two dimension arrays) คือ ตัวแปรชุดที่มีตัวเลขกำกับ (subscript) เพียง 2 ตัว เช่น a[2][4], b[3][4], name[5][30] เป็นต้น
ตัวแปรชุด 3 มิติ (three dimension arrays) คือ ตัวแปรชุดที่มีตัวเลขกำกับ (subscript) เพียง 3 ตัว เช่น a[2][3][4], b[3][4][5] เป็นต้น
5.1.2 การประกาศตัวแปรชุด (declaration of arrays) สามารถทำได้ดังนี้
1) การประกาศตัวแปรชุด 1 มิติ (declaration of one dimension arrays)
โดยที่
type คือ ชนิดของตัวแปรชุด เช่น int, float, char, double เป็นต้น
arrayname คือ ชื่อตัวแปรชุด ตั้งขึ้นตามหลักการตั้งชื่อตัวแปร
size คือ ขนาดของตัวแปรชุดเป็นตัวเลขจำนวนเต็ม
ตัวอย่างการประกาศตัวแปรชุด 1 มิติ
ตัวอย่างที่ 5.1 int s[20]; ภายในหน่วยความจำจะมีการจองเนื้อที่ไว้ดังนี้
การจองเนื้อที่ใช้ช่องละ 2 bytes 20 ช่อง รวมกันทั้งหมดใช้เนื้อที่ 40 bytes
ตัวอย่างที่ 5.2 char p[20]; ภายในหน่วยความจำจะมีการจองเนื้อที่ไว้ดังนี้
การจองเนื้อที่ใช้ช่องละ 1 bytes 20 ช่อง รวมกันทั้งหมดใช้เนื้อที่ 20 bytes
ตัวอย่างที่ 5.3 float t[20]; ภายในหน่วยความจำจะมีการจองเนื้อที่ไว้ดังนี้
การจองเนื้อที่ใช้ช่องละ 4 bytes 20 ช่อง รวมกันทั้งหมดใช้เนื้อที่ 80 bytes
2) การประกาศตัวแปรชุด 2 มิติ (declaration of two dimension arrays)
โดยที่
type คือ ชนิดของตัวแปรชุด เช่น int, float, char, double เป็นต้น
arrayname คือ ชื่อตัวแปรชุด ตั้งขึ้นตามหลักการตั้งชื่อตัวแปร
n คือ ตัวเลขที่ใช้แสดงตำแหน่งแถว (row) มีค่าตั้งแต่ 0, 1, 2, …, n-1
m คือ ตัวเลขที่ใช้แสดงตำแหน่งคอลัมน์ (column) มีค่าตั้งแต่ 0, 1, 2, …, m-1
ตัวอย่างการประกาศตัวแปรชุด 2 มิติ
ตัวอย่างที่ 5.4 int r[3][2]; ภายในหน่วยความจำจะมีการจองเนื้อที่ไว้ดังนี้
การจองเนื้อที่ของตัวแปรชุด 2 มิติ จะมีลักษณะเป็นตาราง (table) มีจำนวนแถว n = 0, 1, 2 และมีจำนวนคอลัมน์ m = 0, 1 โดยที่ในตารางจะมีลักษณะเป็นช่อง ๆ ซึ่งแต่ละช่องก็คือพื้นที่ของสมาชิกแต่ละตัว โดยใช้เนื้อที่ช่องละ 2 bytes มีสมาชิกทั้งหมด 6 ตัว ดังนั้นใช้เนื้อที่ทั้งหมด 12 bytes
วิธีการหาจำนวนสมาชิกทั้งหมดของตัวแปรชุด 1 มิติ และ 2 มิติ
การหาจำนวนสมาชิกทั้งหมดของตัวแปรชุด สามารถคำนวณได้จากสูตรดังนี้
กรณีตัวแปรชุด 1 มิติ
จำนวนสมาชิกทั้งหมดของตัวแปรชุด = ขนาดของตัวแปรชุด (size)
กรณีตัวแปรชุด 2 มิติ
จำนวนสมาชิกทั้งหมดของตัวแปรชุด = n*m
จากตัวอย่าง int r[3] [2]; จะได้ว่า n = 3, m = 2 ดังนั้น จำนวนสมาชิกของตัวแปรชุด = 3*2 = 6 แสดงว่าตัวแปรชุดนี้มีสมาชิกดังนี้ r[0][0], r[0][1], r[n-1][m-1] รวมทั้งหมด 6 สมาชิก
ตัวอย่างที่ 5.5 float X[5] [4]; ภายในหน่วยความจำจะมีการจองเนื้อที่ไว้ดังนี้
การจองเนื้อที่จะมีลักษณะเป็นตาราง (table) มีจำนวนแถว n = 0, 1, 2, 3, 4 และมีจำนวนคอลัมน์ m = 0, 1, 2, 3 โดยที่ในตารางใช้เนื้อที่ช่องละ 4 bytes มีจำนวนทั้งหมด 20 ตัว ดังนั้นใช้เนื้อทั้งหมด 80 bytes
3) การประกาศตัวแปรชุด 3 มิติ (declaration of three dimension arrays)
type arrayname [n] [m] [p];
โดยที่
type คือ ชนิดของตัวแปรชุด เช่น int, float, char, double เป็นต้น
arrayname คือ ชื่อตัวแปรชุดตั้งขึ้นตามหลักการตั้งชื่อตัวแปร
n คือ ตัวเลขกำกับตัวที่ 1 มีค่าตั้งแต่ 0, 1, 2, …., n-1
m คือ ตัวเลขกำกับตัวที่ 2 มีค่าตั้งแต่ 0, 1, 2, …., m-1 p คือ ตัวเลขกำกับตัวที่ 3 มีค่าตั้งแต่ 0, 1, 2, …., p-1
วิธีการหาจำนวนสมาชิกทั้งหมดในตัวแปรชุด 3 มิติ หาได้จากสูตรดังนี้
จำนวนสมาชิกทั้งหมดของตัวแปรชุด = n*m*p
ตัวอย่างการประกาศตัวแปรชุด 3 มิติ float a[2][2][3]; ดังนั้น n = 2 , m = 2, p = 3 จะได้ว่าจำนวนสมาชิกทั้งหมดของตัวแปรชุด = 2*2*3 = 12 ตัว
ดังนั้นเราสามารถเขียนสมาชิกทั้งหมดของตัวแปรชุดนี้ได้ดังตาราง
Column 0 Column 1
ตัวที่ 1 ตัวที่ 2 ตัวที่ 3 ตัวที่ 1 ตัวที่ 2 ตัวที่ 3
Row 0 a[0][0][0] a[0][0][1] a[0][0][2] a[0][1][0] a[0][1][1] a[0][1][2]
Row 1 a[1][0][0] a[1][0][1] a[1][0][2] a[1][1][0] a[1][1][1] a[1][1][2]
โดยที่สมาชิกแต่ละตัวใช้เนื้อที่ตัวละ 4 bytes จำนวนสมาชิกทั้งหมดมี 12 ตัว ดังนั้นใช้เนื้อที่ทั้งหมดคือ 4*12 = 48 bytes
5.1.3 การกำหนดค่าเริ่มต้นให้กับตัวแปรชุด (initializing arrays)
1) การกำหนดค่าตัวเลขให้กับตัวแปรชุด
รูปแบบที่ 1 (กรณีตัวแปรชุด 1 มิติ)
type arrayname[size] = { value list };
รูปแบบที่ 2 (กรณีตัวแปรชุด 2 มิติ)
type arrayname[n][m] = { value list };
โดยที่
value list คือ ค่าคงที่ชนิดตัวเลขที่ต้องการกำหนดให้ตัวแปรชุด ถ้ามีหลายค่าให้ใช้เครื่องหมาย , (comma) คั่นระหว่างค่าคงที่แต่ละค่า
โดยค่าคงที่ทั้งหมดจะต้องอยู่ภายใต้เครื่องหมาย { }
ตัวอย่าง 5.6 int a[10] = {10, 20, 30, 40,50, 60, 70, 80, 90, 100};
ภายในหน่วยความจำจะเก็บตัวแปรชุดดังนี้
ตัวอย่างที่ 5.7 float p[5][3] = {
3.0, 4.5, 5.5,
4.6, 5.5, 6.5,
5.0, 6.2, 7.0,
6.3, 6.8, 7.4,
7.5, 8.0, 9.0
};
ภายในหน่วยความจำจะเก็บตัวแปรชุดเป็นลักษณะตาราง (table) ดังนี้
โดยที่สมาชิกแต่ละตัวใช้เนื้อที่ 4 bytes ดังนั้นใช้เนื้อที่ทั้งหมด = 4*15 = 60 bytes
2) การกำหนดค่าคงที่ชนิดสตริงให้กับตัวแปรสตริง
รูปแบบที่ 1 (กรณีตัวแปรชุด 1 มิติ)
char arrayname[size] = “string constant”;
รูปแบบที่ 2 (กรณีตัวแปรชุด 2 มิติ)
char arrayname[n][m] = {“string constant”};
โดยที่
string constants คือ ค่าคงที่ชนิดสตริงที่ต้องการกำหนดให้ตัวแปรชุด ถ้ามีหลายค่าจะต้องใช้เครื่องหมาย , (comma) คั่นระหว่างค่าคงที่แต่ละค่า
ตัวอย่างที่ 5.8 char s[12] = “ASIAN GAME” ;
ภายในหน่วยความจำจะเก็บข้อมูลตัวแปรชุดมีลักษณะดังนี้
null character
ตัวอย่างที่ 5.9 char province[3][13] = {
“NAKHONPANOM” ,
“SAKON NAKHON” ,
“MOOKDAHAN” } ;
ภายในหน่วยความจำจะเก็บข้อมูลมีลักษณะดังนี้
ทั้งหมดใช้เนื้อที่ 3 x 13 = 39 bytes
การอ้างถึงสมาชิกในตัวแปรชุด 2 มิติ
เช่น
province [0] คือ สมาชิกแถวที่ 1 ทั้งแถว นั่นคือข้อมูล NAKHONPANOM
province [1] คือ สมาชิกแถวที่ 2 ทั้งแถว นั่นคือข้อมูล SAKON NAKHON province [2] คือ สมาชิกแถวที่ 3 ทั้งแถว นั่นคือข้อมูล MOOKDAHAN
province [0][0] คือ สมาชิกของ province [0] ตัวที่ 1 คือตัวอักษร N
province [1][2] คือ สมาชิกของ province [1] ตัวที่ 3 คือตัวอักษร K
5.1.4 การนำข้อมูลเข้าไปเก็บและการแสดงผลลัพธ์ของข้อมูลในตัวแปรชุด
โดยปกติเราจะใช้คำสั่ง for หรือ while หรือ do while คำสั่งใดคำสั่งหนึ่งมาช่วยในการนำข้อมูลเข้าเก็บและแสดงผลลัพธ์ข้อมูลในตัวแปรชุด ส่วนมากนิยมใช้คำสั่ง for มากกว่าคำสั่งอื่นทั้งนี้เนื่องจากตัวแปรชุดนั้นเราสามารถทราบขนาดที่แน่นอนได้ ทำให้กำหนดจำนวนรอบการทำงานได้
เพื่อความเข้าใจเกี่ยวกับการนำข้อมูลเข้าไปเก็บและการแสดงผลลัพธ์ของตัวแปรชุดมากยิ่งขึ้น ให้ศึกษาโปรแกรมตัวอย่างที่ 5.1, 5.2, 5.3 และ 5.4 ดังต่อไปนี้
โปรแกรมตัวอย่างที่ 5.1 แสดงการใช้ตัวแปรชุด 1 มิติ ชื่อ scores เก็บคะแนนนักเรียน
/* array1.C */
#include<stdio.h> /* บรรทัดที่ 1 */
#include<conio.h> /* บรรทัดที่ 2 */
/* Record student's scores. */ /* บรรทัดที่ 3 */
main() /* บรรทัดที่ 4 */
{ /* บรรทัดที่ 5 */
int index, scores[5]; /* บรรทัดที่ 6 */
scores[0] = 59; /* บรรทัดที่ 7 */
scores[1] = 67; /* บรรทัดที่ 8 */
scores[2] = 85; /* บรรทัดที่ 9 */
scores[3] = 92; /* บรรทัดที่ 10 */
scores[4] = 74; /* บรรทัดที่ 11 */
clrscr(); /* บรรทัดที่ 12 */
for (index = 0; index < 5; index++) /* บรรทัดที่ 13 */
printf("Student's score: %d\n", scores[index]); /* end for */ /* บรรทัดที่ 14 */
getch(); /* บรรทัดที่ 15 */
return(0); /* บรรทัดที่ 16 */
} /* บรรทัดที่ 17 */
ผลลัพธ์ที่ได้จากโปรแกรม
คำอธิบายโปรแกรม
จากโปรแกรมตัวอย่างที่ 5.1 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังนี้
บรรทัดที่ 6 ประกาศตัวแปร index เป็นชนิดจำนวนเต็ม และ scores เป็นตัวแปรชุด 1 มิติ ชนิดจำนวนเต็มมีสมาชิก 5 ตัว
บรรทัดที่ 7 ถึง 11 กำหนค่าจำนวนเต็มให้กับตัวแปรชุด scores[0] ถึง scores[4]
บรรทัดที่ 13 คำสั่ง for ทำหน้าที่วนรอบทำงานซ้ำ 5 ครั้ง เพื่อช่วยพิมพ์คะแนนนักเรียนที่เก็บไว้ในตัวแปรชุด scores[0] ถึง scores[4]
บรรทัดที่ 14 และ 15 ฟังก์ชัน printf( ) เพื่อแสดงคะแนนของนักเรียนแต่ละคนออกที่จอภาพซึ่งเก็บไว้ในตัวแปรชุด scores[0] ถึง scores[4] หลังจากนั้นจะหยุดรอรับค่าใด ๆ จากคีย์บอร์ด ซึ่งถ้ากด enter ก็จะกลับสู่โปรแกรม
บรรทัดที่ 16 ส่งค่า 0 (ศูนย์) กลับให้กับฟังก์ชัน main( )
ข้อสังเกต ฟังก์ชัน main( ) ของโปรแกรมตัวอย่างที่ 5.1 เป็นฟังก์ชันที่ต้องการให้ส่งค่ากลับ ในการเขียนโปรแกรมจะต้องมีการใช้ฟังก์ชัน return( ) ซึ่งถ้าไม่ใช้เวลาที่เรา compile โปรแกรม จะมีคำเตือนให้เราทราบทุกครั้ง แต่โปรแกรมก็สามารถ run ได้
โปรแกรมตัวอย่างที่ 5.2 แสดงการใช้ตัวแปรชุด 1 มิติ สำหรับเก็บข้อมูลและนำข้อมูลในตัวแปรชุดมาคำนวณค่า พร้อมทั้งแสดงผลลัพธ์ที่ได้ออกจอภาพ
/* array2.c */
#include<stdio.h> /* บรรทัดที่ 1 */
#include<conio.h> /* บรรทัดที่ 2 */
#include<stdlib.h> /* บรรทัดที่ 3 */
void main(void) /* บรรทัดที่ 4 */
{ float num[100] ; /* บรรทัดที่ 5 */
float sum= 0 , average ; /* บรรทัดที่ 6 */
int i, n ; char numstr[20]; /* บรรทัดที่ 7 */
clrscr(); /* บรรทัดที่ 8 */
printf("Enter Total of number(n<100) : "); /* บรรทัดที่ 9 */
n = atoi(gets(numstr)); /* บรรทัดที่ 10 */
/* ===== Input Data ===== */ /* บรรทัดที่ 11*/
for( i=0; i<n; i++) { /* บรรทัดที่ 12 */
printf("\nEnter NUMBER #%d : ",i+1); /* บรรทัดที่ 13 */
num[i] = atof(gets(numstr)); /* บรรทัดที่ 14 */
sum=sum+num[i]; /* บรรทัดที่ 15 */
printf("\n"); /* บรรทัดที่ 16 */
} /* end for */ /* บรรทัดที่ 17 */
/* ===== Calulate MEAN ===== */ /* บรรทัดที่ 18 */
average = sum/n ; /* บรรทัดที่ 19 */
printf("N =%d\t Sum =%10.2f\n",n,sum); /* บรรทัดที่ 20 */
printf("Average = %10.2f\n",average); /* บรรทัดที่ 21 */
getch(); /* บรรทัดที่ 22 */
} /* end main */ /* บรรทัดที่ 23 */
ผลลัพธ์ที่ได้จากโปรแกรม
คำอธิบายโปรแกรม
จากโปรแกรมตัวอย่างที่ 5.2 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังน
บรรทัดที่ 3 คำสั่ง #include <stdlib.h> ให้การสนับสนุนฟังก์ชัน atoi( ) และฟังก์ชัน atof( ) สำหรับโปรแกรมนี้ ในบรรทัดที่ 10 และ 14 ตามลำดับ
บรรทัดที่ 5 ประกาศตัวแปร num เป็นตัวแปรชุด 1 มิติ ชนิด float มีสมาชิก 100 ตัว
บรรทัดที่ 7 ประกาศตัวแปร numstr เป็นตัวแปรชุด 1 ติ ชนิด char มีสมาชิก 20 ตัว
บรรทัดที่ 10 ฟังก์ชัน atoi( ) ใช้เปลี่ยน string เป็นตัวเลขจำนวนเต็ม จากฟังก์ชัน gets( ) รับตัวอักขระมาเก็บไว้ในตัวแปร numstr แล้วเปลี่ยนค่า string ของตัวแปร numstr ไปเก็บไว้ในตัวแปร n โดยใช้ฟังก์ชัน atoi( )
บรรทัดที่ 12 คำสั่ง for ช่วยในการเก็บข้อมูลไว้ในตัวแปรชุด num ซึ่งมีจำนวนรอบของการทำงานเท่ากับจำนวนสมาชิกของตัวแปรชุด คือ n รอบ
บรรทัดที่ 14 ฟังก์ชัน atof( ) ใช้เปลี่ยน string เป็นตัวเลขทศนิยม ซึ่งมีการทำงานคล้ายกับฟังก์ชัน atoi( ) ในบรรทัดที่ 10
บรรทัดที่ 15 คำสั่ง sum = sum + num[i]; เป็นการบวกสะสมค่าตัวแปรชุด
บรรทัดที่ 18 ถึง 21 คำสั่ง average = sum/n; เป็นการคำนวณค่าเฉลี่ยของตัวแปรชุด แล้วแสดงผลค่าตัวแปร n ตัวแปร sum และตัวแปร average ออกจอภาพ
บรรทัดที่ 22 หยุดรอรับค่าใด ๆ จากคีย์บอร์ด ซึ่งถ้าเรากด enter ก็จะกลับสู่โปรแกรม
โปรแกรมตัวอย่างที่ 5.3 แสดงการใช้ตัวแปรชุด 2 มิติ สำหรับเก็บคะแนนและคำนวณค่าเฉลี่ยของคะแนนในแต่ละชุดแสดงผลออกจอภาพ
/* array3.C */
#include<stdio.h> /* บรรทัดที่ 1 */
#include<conio.h> /* บรรทัดที่ 2 */
/* Record student's score */
main() /* บรรทัดที่ 3 */
{ /* บรรทัดที่ 4 */
int i, j, sum, scores[3][5] = { /* บรรทัดที่ 5 */
{ 84 , 71 , 96 , 65 , 79 }, /* บรรทัดที่ 6 */
{ 90 , 55 , 83 , 68 , 96 }, /* บรรทัดที่ 7 */
{ 61 , 77 , 82 , 94 , 59 } /* บรรทัดที่ 8 */
}; /* บรรทัดที่ 9 */
clrscr(); /* บรรทัดที่ 10 */
for (i = 0; i < 3; i++){ /* loop over tests. */ /* บรรทัดที่ 11 */
for (j = 0, sum = 0; j < 5; j++) /* บรรทัดที่ 12 */
sum = sum + scores[i][j]; /* บรรทัดที่ 13 */
printf("Average for test %d is %f.\n", i, (float) sum / 5); /* บรรทัดที่ 14 */
} /* end for */ /* บรรทัดที่ 15 */
getch(); /* บรรทัดที่ 16 */
return(0); /* บรรทัดที่ 17 */
} /* บรรทัดที่ 18 */
ผลลัพธ์ที่ได้จากโปรแกรม
คำอธิบายโปรแกรม
จากโปรแกรมตัวอย่างที่ 5.3 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังนี้
บรรทัดที่ 5 ถึง 9 ประกาศตัวแปรชุด 2 มิติ ชนิดจำนวนเต็มของตัวแปรชื่อ scores มีจำนวนสมาชิกทั้งหมด 15 ตัว
บรรทัดที่ 11 คำสั่ง for เพื่อตรวจสอบว่า loop เกินจำนวนรอบ คือ แถวของตัวแปรชุดหรือไม่
บรรทัดที่ 12 คำสั่ง for เพื่อนำคะแนนที่เก็บในตัวแปรชุดทั้ง 15 ตัวมารวมกัน ในคำสั่งบรรทัดที่ 13
บรรทัดที่ 14 พิมพ์คะแนนเฉลี่ยของนักเรียนทั้ง 5 คน ในการสอบแต่ละครั้ง โดยที่ (float) sum/5 เป็นการทำให้ตัวแปร sum เป็นจำนวนทศนิยมชั่วคราว เพราะปกติเราประกาศตัวแปร sum เป็นชนิดจำนวนเต็ม
บรรทัดที่ 15 หยุดรอรับค่าใด ๆ จากคีย์บอร์ด ซึ่งถ้าเรากด enter ก็จะกลับสู่โปรแกรม
โปรแกรมตัวอย่างที่ 5.4 แสดงการใช้ตัวแปรชุด 2 มิติ สำหรับเก็บชื่อจังหวัด แล้วนำข้อมูลมาแสดงออกที่จอภาพ
/* array4.c */
#include<stdio.h> /* บรรทัดที่ 1 */
#include<conio.h> /* บรรทัดที่ 2 */
#include<stdlib.h> /* บรรทัดที่ 3 */
void main(void) /* บรรทัดที่ 4 */
{ /* บรรทัดที่ 5 */
char province[100][40]; /* บรรทัดที่ 6 */
int i, n; char numstr[20]; /* บรรทัดที่ 7 */
clrscr( ); /* บรรทัดที่ 8 */
printf("Enter Total of Province (n<100) : " ); /* บรรทัดที่ 9 */
n = atoi(gets(numstr)); /* บรรทัดที่ 10 */
for( i=0; i<n; i++) { /* บรรทัดที่ 11 */
printf("\nEnter your Province : "); /* บรรทัดที่ 12 */
gets( province[i] ) ; /* บรรทัดที่ 13 */
} /* บรรทัดที่ 14 */
for( i=0; i<n; i++) /* บรรทัดที่ 15 */
printf("\nYour Province is %s", province[i]); /* บรรทัดที่ 16 */
getch(); /* บรรทัดที่ 17 */
} /* end main */ /* บรรทัดที่ 18 */
ผลลัพธ์ที่ได้จากโปรแกรม
คำอธิบายโปรแกรม
จากโปรแกรมตัวอย่างที่ 5.4 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังนี้
บรรทัดที่ 3 คำสั่ง #include <stdlib.h> ให้การสนับสนุนฟังก์ชัน atoi( ) เพื่อเปลี่ยนข้อมูลสตริงเป็นชนิดจำนวนเต็ม ซึ่งเรียกใช้ฟังก์ชันนี้ ในบรรทัดที่ 10
บรรทัดที่ 11 คำสั่ง for เพื่อนำค่าสตริงที่รับเข้ามาไปเก็บไว้ในตัวแปรชุด province[i] ในคำสั่งบรรทัดที่ 13
บรรทัดที่ 15 คำสั่ง for เพื่อนำค่าสตริงที่เก็บไว้ในตัวแปร province[i] ออกแสดงที่จอภาพ ตามคำสั่ง บรรทัดที่ 16
บรรทัดที่ 17 หยุดรอรับค่าใด ๆ จากคีย์บอร์ด ซึ่งถ้าเรากด enter ก็จะกลับสู่โปรแกรม
5.2 ค่าคงที่สตริงและตัวแปรสตริง (string constants and string variables)
ค่าคงที่สตริง คือ ตัวอักขระ (characters) ใด ๆ ที่เขียนอยู่ภายใต้เครื่องหมาย “ “ (double quotation) เช่น “Greeting!” , ”Hello, ” ”SA-WAS-DEE” , “4567” , “123.45” เป็นต้น
ตัวแปรสตริง คือ ตัวแปรชุดที่เก็บค่าคงที่ชนิดสตริง โดยมีชนิดของตัวแปรชุดเป็น char เช่น char name[30]=”KANNIKAR”; หรือ char strnum[10]=”12345”; เป็นต้น
สำหรับการเก็บค่าคงที่ชนิดสตริงไว้ในตัวแปรสตริงภายในหน่วยความจำนั้น จะเก็บเรียงกันไปทีละตัวอักขระ โดยใช้เนื้อที่ 1 byte ต่อการเก็บตัวอักษร 1 ตัว และใน byte สุดท้ายสตริงจะมีการเก็บ \0 (null character) ไว้เพื่อเป็นการบอกให้ compiler รู้ว่าหมดข้อมูลที่เก็บไว้แล้ว
5.2.1 การประกาศตัวแปรสตริง 1 มิติ
เนื่องจากตัวแปรสตริง คือตัวแปรชุดที่มีชนิดเป็น char ดังนั้นจึงสามารถประกาศตัวแปรสตริงได้ดังนี้
char stringname[size];
หรือ
char stringname[size] = “string constant”;
โดยที่
stringname คือ ชื่อตัวแปรสตริง ตั้งขึ้นตามหลักการตั้งชื่อตัวแปร
string constant คือ ค่าคงที่ชนิดสตริง โดยต้องเขียนอยู่ภายใต้เครื่องหมาย “ “ เสมอ
size คือ ขนาดของตัวแปรสตริง ควรกำหนดให้เนื้อที่ทั้งหมดที่ใช้เก็บข้อมูลมีขนาดเกินค่าคงที่สตริงที่ยาวที่สุดไปอย่างน้อย 1 byte ในทางปฏิบัตินิยมกำหนดขนาดให้มาก ๆ ไว้ก่อน ส่วนจะใช้เนื้อที่ครบทั้งหมดหรือไม่ ไม่มีผลอะไรในโปรแกรม
ตัวอย่างการประกาศตัวแปรสตริง 1 มิติ
1) char name[26]; /* ประกาศตัวแปรสตริง name มีขนาด 26 bytes */
2) char name[26], address[41];
/* ประกาศตัวแปรสตริง name มีขนาด 26 bytes และตัวแปรสตริง address มีขนาด 41 bytes ตามลำดับ */
3) char str[9] = “COMPUTER”;
/* ประกาศตัวแปรสตริง str มีขนาด 9 bytes และกำหนดข้อความให้สตริง */
แต่ถ้าเราเขียนคำสั่งเป็น char str[8] = “COMPUTER”; จะเกิด error ขึ้นเพราะความกว้างของตัว แปรสตริงน้อยกว่าคงที่สตริงอยู่ 1 byte ดังนั้นจะต้องกำหนดขนาดให้เกินค่าคงที่สตริงไว้อย่างน้อย 1 byte เสมอ
4) char city[80] = “Bangkok, Thailand”;
/* ประกาศตัวแปรสตริง city มีขนาด 80 bytes และกำหนดข้อความให้สตริง */
5.2.2 การประกาศตัวแปรสตริง 2 มิติ
char stringname[n][m]
หรือ
char stringname[n][m] = {“string constant1”,
“string constant2 “,...,”string constanN };
โดยที่
stringname คือ ชื่อตัวแปรสตริง ตั้งขึ้นตามหลักการตั้งชื่อตัวแปร
n, m คือ จำนวนแถวและจำนวนคอลัมน์ตามลำดับ
string constant1, string constant2,…., string constantN คือ ค่าคงที่ชนิดสตริงตัวที่ 1, 2, …., N ตามลำดับ ซึ่งจะต้องเขียนอยู่ภายใต้เครื่องหมาย “….” เสมอ
ตัวอย่างการประกาศตัวแปรสตริง 2 มิติ
char name[3] [20];
/* ตัวแปรสตริง name 2 มิติ มีขนาด 3*20 = 60 bytes*/
2) char name[3] [20] = {“KANNIKAR”,”SURAPORN”,”THAITANA”};
/* ประกาศตัวแปรสตริง name 2 มิติ มีขนาด 3*20 = 60 bytes และกำหนดค่าสตริง KANNIKAR, SURAPORN และ THAITANA ให้กับตัวแปรสตริง name[0], name[1] และ name[2] ตามลำดับ */
5.3 ฟังก์ชันที่ใช้งานเกี่ยวกับสตริง (string functions)
นภาษา C มีฟังก์ชันที่ใช้จัดการเกี่ยวกับค่าคงที่สตริง และตัวแปรสตริงอยู่หลายฟังก์ชันดังนี้
• ฟังก์ชัน strlen( )
• ฟังก์ชัน strcmp( )
• ฟังก์ชัน strcpy( )
• ฟังก์ชัน strcat( )
โดยก่อนที่จะใช้ฟังก์ชันเหล่านี้จะต้องมีการใช้คำสั่ง # include<string.h> เข้ามาในโปรแกรมด้วยจึงจะสามารถทำงานได้
5.3.1 ฟังก์ชัน strlen( )
strlen( ) เป็นฟังก์ที่ใช้นับความยาวของค่าคงที่สตริง หรือตัวแปรสตริง
รูปแบบการใช้
strlen(string variable);
หรือ
strlen(“string constant”);
โดยที่
string variable และ string constant คือ ตัวแปรสตริง และค่าคงที่สตริง ตามลำดับ ใช้อย่างใดอย่างหนึ่งเท่านั้น
เช่น strlen(“computer”); หรือ char name[20]= “KANNIKAR” ; strlen(name); เป็นต้น
ลักษณะของฟังก์ชัน strlen( ) นี้เป็นฟังก์ชันที่มีการส่งค่ากลับเป็นตัวเลขจำนวนเต็ม (integer) มายังชื่อฟังก์ชัน ดังนั้นจึงนิยมกำหนดตัวแปรชนิด int ขึ้นมา 1 ตัว เพื่อเก็บค่าความยาวของสตริงเอาไว้
เช่น
int n;
char s[80]= “BANGKOK, THAILAND” ;
n=strlen(s); /* กำหนดค่าความยาวของสตริงส่งกลับให้ตัวแปร n */
เพื่อความเข้าใจเกี่ยวกับการทำงานของฟังก์ชัน strlen( ) ได้ดียิ่งขึ้นควร ศึกษาโปรแกรมตัวอย่างที่ 5.5 ดังต่อไปนี้
โปรแกรมตัวอย่างที่ 5.5
/* strlen.c */
#include<stdio.h> /* บรรทัดที่ 1 */
#include<conio.h> /* บรรทัดที่ 2 */
#include<string.h> /* บรรทัดที่ 3 */
void main(void) /* บรรทัดที่ 4 */
{ /* บรรทัดที่ 5 */
int n; /* บรรทัดที่ 6 */
char s[81]; /* บรรทัดที่ 7 */
clrscr( ); /* บรรทัดที่ 8 */
printf("Enter your string : "); /* บรรทัดที่ 9 */
gets(s); /* บรรทัดที่ 10 */
n = strlen(s); /* บรรทัดที่ 11 */
printf("\nYour string is %s\n", s); /* บรรทัดที่ 12 */
printf("Length of string is %d", n); /* บรรทัดที่ 13 */
getch(); /* บรรทัดที่ 14 */
} /* บรรทัดที่ 15 */
ผลลัพธ์ที่ได้จากโปรแกรม
คำอธิบายโปรแกรม
จากโปรแกรมตัวอย่างที่ 5.5 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังนี้
บรรทัดที่ 3 คำสั่ง #incluce <string.h> ในโปรแกรมตัวอย่างนี้ ให้การสนับสนุนฟังก์ชัน strlen( ) สำหรับหาความยาวของตัวแปรสตริง ในบรรทัดที่ 11
บรรทัดที่ 10 คำสั่ง gets(s); เป็นการรับข้อมูลสตริงไปเก็บไว้ในตัวแปรสตริง s ซึ่งตัวแปรสตริง s ได้ประกาศไว้ในบรรทัดที่ 7
บรรทัดที่ 11 คำสั่ง n = strlen(s); เป็นการกำหนดค่าความยาวของสตริง s ให้เก็บความยาวไว้ที่ตัวแปร n
บรรทัดที่ 12 ถึง 13 แสดงสตริงและความยาวของสตริงที่หาได้ ออกแสดงที่จอภาพ
บรรทัดที่ 14 หยุดรอรับค่าใด ๆ จากคีย์บอร์ด ซึ่งถ้าเรากด enter ก็จะกลับสู่โปรแกรม
5.3.2 ฟังก์ชัน strcmp( )
strcmp( ) เป็นฟังก์ชันที่ใช้เปรียบเทียบข้อมูลชนิดสตริง 2 ค่า ว่ามีค่าเท่ากัน หรือมากกว่า หรือน้อยกว่าอย่างใดอย่างหนึ่ง ซึ่งการเปรียบเทียบสตริงจะใช้ค่ารหัส ASCII เปรียบเทียบทีละตัวอักขระ
รูปแบบการใช้
strcmp(str1var, str2var);
หรือ
strcmp(str1constant, str2constant);
โดยที่
str1var, str2var คือตัวแปรสตริงตัวที่ 1 และ 2 ตามลำดับ
Str1constant, str2constant คือ ค่าคงที่สตริงค่าที่ 1 และ 2 ตามลำดับ
ผลการเปรียบเทียบระหว่าง str1constant, และ str2constant มีดังนี้
ถ้า str1constant > star2constant จะได้ค่ามากกว่าศูนย์
ถ้า str1constant < star2constant จะได้ค่าน้อยกว่าศูนย์
ถ้า str1constant = star2constant จะได้ค่าเท่ากับศูนย์
โดยค่าที่ได้จากการเปรียบเทียบนี้เป็นตัวเลขจำนวนเต็มจะถูกส่งกลับมาเก็บไว้ที่ชื่อฟังก์ชัน strcmp( )
เพื่อความเข้าใจเกี่ยวกับการทำงานของฟังก์ชัน strcmp( ) ได้ดียิ่งขึ้นควรศึกษาโปรแกรมตัวอย่างที่ 5.6 ดังต่อไปนี้
โปรแกรมตัวอย่างที่ 5.6 แสดงการใช้ฟังก์ชัน strcmp( ) เพื่อเปรียบเทียบข้อมูลชนิดสตริง 2 ค่า ซึ่งมีค่ามากกว่าหรือน้อยกว่าอย่างใดอย่างหนึ่ง
/* strcmp.c */
#include<stdio.h> /* บรรทัดที่ 1 */
#include<conio.h> /* บรรทัดที่ 2 */
#include<string.h> /* บรรทัดที่ 3 */
void main(void) /* บรรทัดที่ 4 */
{ /* บรรทัดที่ 5 */
char str1[80], str2[80]; /* บรรทัดที่ 6 */
clrscr(); /* บรรทัดที่ 7 */
printf("Enter string1: "); /* บรรทัดที่ 8 */
gets(str1); /* บรรทัดที่ 9 */
printf("\nEnter string2: "); /* บรรทัดที่ 10 */
gets(str2); /* บรรทัดที่ 11 */
if( strcmp(str1, str2) > 0 ) /* บรรทัดที่ 12 */
printf("\n%s is greater than %s (ASCII code)", str1, str2); /* บรรทัดที่ 13 */
else if( strcmp(str1,str2) == 0 ) /* บรรทัดที่ 14 */
printf("\n%s is equal to %s (ASCII code)", str1, str2); /* บรรทัดที่ 15 */
else /* บรรทัดที่ 16 */
printf("\n%s is less than %s (ASCII code)", str1, str2); /* บรรทัดที่ 17 */
getch(); /* บรรทัดที่ 18 */
} /* บรรทัดที่ 19 */
ผลลัพธ์ที่ได้จากโปรแกรม
คำอธิบายโปรแกรม
จากโปรแกรมตัวอย่างที่ 5.6 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังนี้
บรรทัดที่ 3 คำสั่ง #include <string.h> ในโปรแกรมตัวอย่างนี้ ให้การสนับสนุนฟังก์ชัน strcmp( ) สำหรับเปรียบเทียบข้อมูลชนิดสตริง 2 ค่า
บรรทัดที่ 12 เป็นการตรวจสอบค่า str1> str2 หรือไม่ โดยใช้ฟังก์ชัน strcmp( ) ในบรรทัดที่ 12 และ 14 (หรือค่าที่ได้จากฟังก์ชัน strcmp( ) > 0 หรือไม่) ซึ่งถ้าใช่ก็ให้พิมพ์ข้อความบอก
บรรทัดที่ 14 เป็นการตรวจสอบค่า str1 == str2 หรือไม่ โดยใช้ฟังก์ชัน strcmp( ) (หรือค่าที่ได้จากฟังก์ชัน strcmp( ) == 0 หรือไม่) ซึ่งถ้าใช่ก็ให้พิมพ์ข้อความบอก
บรรทัดที่ 15 และ 17 ถ้าไม่ใช่ทั้ง 2 กรณีที่กล่าวมาแสดงว่าค่าสตริงที่ตรวจสอบนั้น สตริงตัวแรกมีค่าน้อยกว่าสตริงตัวที่สอง ก็ให้พิมพ์ข้อความบอก
บรรทัดที่ 15 หยุดรอรับค่าใด ๆ จากคีย์บอร์ด ซึ่งถ้าเรากด enter ก็จะกลับสู่โปรแกรม
ข้อสังเกต ฟังก์ชัน strcmp( ) จะเปรียบเทียบสตริงด้วยค่ารหัส ASCII โดยเปรียบเทียบทีละตัวอักขระ
5.3.3 ฟังก์ชัน strcpy( )
strcpy( ) เป็นฟังก์ชันที่ใช้คัดลอกข้อมูลจาก string ค่าหนึ่งไปยัง string อีกค่าหนึ่ง
รูปแบบที่ใช้
strcpy(str2, str1);
โดยที่
str1 คือ ค่าคงที่สตริง หรือค่าตัวแปรสตริงที่ต้องการคัดลอก
str2 คือ ตัวแปรสตริงที่ใช้เก็บค่าที่คัดลอกมาจาก str1
เช่น char s1[80], s2[80];
strcpy(s1,”Computer”);
strcpy(s2,s1);
เพื่อความเข้าใจเกี่ยวกับการทำงานของฟังก์ชัน strcpy( ) ได้ดียิ่งขึ้น ควรศึกษาโปรแกรมตัวอย่างที่ 5.7 ดังต่อไปนี้
โปรแกรมตัวอย่างที่ 5.7 แสดงการใช้ฟังก์ชัน strcpy( ) เพื่อคัดลอกข้อมูลจาก string ค่าหนึ่งไปยัง string อีกค่าหนึ่ง
/* strcpy.c */
#include<stdio.h> /* บรรทัดที่ 1 */
#include<conio.h> /* บรรทัดที่ 2 */
#include<string.h> /* บรรทัดที่ 3 */
void main(void) /* บรรทัดที่ 4 */
{ /* บรรทัดที่ 5 */
char str1[80], str2[80]; /* บรรทัดที่ 6 */
clrscr(); /* บรรทัดที่ 7 */
strcpy(str1,"Hello, Thailand"); /* บรรทัดที่ 8 */
strcpy(str2,str1); /* บรรทัดที่ 9 */
printf("String1 = String2 = %s",str2); /* บรรทัดที่ 10 */
getch(); /* บรรทัดที่ 11 */
} /* บรรทัดที่ 12 */
ผลลัพธ์ที่ได้จากโปรแกรม
คำอธิบายโปรแกรม
จากโปรแกรมตัวอย่างที่ 5.7 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังนี้
บรรทัดที่ 3 คำสั่ง #include <string.h> ในโปรแกรมตัวอย่างนี้ ให้การสนับสนุนฟังก์ชัน strcpy( ) สำหรับคัดลอกข้อมูลจาก string ค่าหนึ่งไป string อีกค่าหนึ่ง ในบรรทัดที่ 8 และ 9
บรรทัดที่ 8 ฟังก์ชัน strcpy( ) คัดลอกข้อความคำว่า Hello, Thailand ไปเก็บไว้ในตัวแปร str1
บรรทัดที่ 9 ฟังก์ชัน strcpy( ) คัดลอกข้อความในตัวแปร str1 ไปเก็บไว้ในตัวแปร
str2
บรรทัดที่ 10 แสดงข้อความที่เก็บในตัวแปร str2 แสดงที่จอภาพ
บรรทัดที่ 11 หยุดรอรับค่าใด ๆ จากคีย์บอร์ด ซึ่งถ้ากด enter ก็จะกลับสู่โปรแกรม
5.3.4 ฟังก์ชัน strcat( )
strcat( ) เป็นฟังก์ชันที่ใช้เชื่อมค่าคงที่ชนิดสตริง 2 ค่า เข้าด้วยกัน โดยผลลัพธ์จะเก็บเอาไว้ในตัวแปรสตริงตัวแรกเสมอ
รูปแบบการใช้
strcat(str1,str2);
โดยที่
str1 คือ ตัวแปรสตริงตัวที่ 1 ใช้เก็บผลลัพธ์ของการเชื่อมสตริงทั้ง 2 ตัว
str2 คือ ตัวแปรสตริงตัวที่ 2 หรือค่าคงที่สตริงก็ได้
เพื่อความเข้าใจเกี่ยวกับการทำงานของฟังก์ชัน strcat( ) ได้ดียิ่งขึ้นควรศึกษาโปรแกรมตัวอย่างที่ 5.8 ดังต่อไปนี้
โปรแกรมตัวอย่างที่ 5.8 แสดงการใช้ฟังก์ชัน strcat( ) เพื่อเชื่อมค่าคงที่สตริง 2 ค่าเข้าด้วยกัน
/* strcat.c */
#include<stdio.h> /* บรรทัดที่ 1 */
#include<conio.h> /* บรรทัดที่ 2 */
#include<string.h> /* บรรทัดที่ 3 */
void main(void) /* บรรทัดที่ 4 */
{ /* บรรทัดที่ 5 */
char str1[80], str2[80]; /* บรรทัดที่ 6 */
clrscr(); /* บรรทัดที่ 7 */
strcpy(str1, "Computer Programming Language 1"); /* บรรทัดที่ 8 */
strcpy(str2, " is your course... "); /* บรรทัดที่ 9 */
printf("%s", strcat(str1, str2) ); /* บรรทัดที่ 10 */
getch(); /* บรรทัดที่ 11 */
} /* บรรทัดที่ 12 */
ผลลัพธ์ที่ได้จากโปรแกรม
คำอธิบายโปรแกรม
จากโปรแกรมตัวอย่างที่ 5.8 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังนี้
บรรทัดที่ 3 คำสั่ง #include <string.h> ในโปรแกรมตัวอย่างนี้ ให้การสนับสนุนฟังก์ชัน strcpy( ) และฟังก์ชัน strcat( ) สำหรับเชื่อมค่าสตริง 2 ค่าเข้าด้วยกัน ในบรรทัดที่ 8, 9 และ 10
บรรทัดที่ 8 ฟังก์ชัน strcpy( ) คัดลอกข้อความคำว่า Computer Programming Language 1 ไปเก็บไว้ในตัวแปร str1
บรรทัดที่ 9 ฟังก์ชัน strcpy( ) คัดลอกข้อความคำว่า is your course... ไปเก็บไว้ในตัวแปร str2
บรรทัดที่ 10 ใช้ฟังก์ชัน strcat( ) เพื่อเชื่อมต่อค่าคงที่ชนิดสตริง ในตัวแปร str1 และ str2 เข้าด้วยกัน แล้วแสดงผลออกจอภาพ ด้วยฟังก์ชัน printf( )
บรรทัดที่ 11 หยุดรอรับค่าใด ๆ จากคีย์บอร์ด ซึ่งถ้าเรากด enter ก็จะกลับสู่โปรแกรม
5.4 สรุปท้ายบท
ตัวแปรชุด คือ ตัวแปรชนิดหนึ่งที่ใช้ชื่อเพียงชื่อเดียวแต่มีตัวเลขแสดงตำแหน่งกำกับไว้ (subscript) เพื่อเป็นการบอกว่าเป็นสมาชิกของตัวแปรชุดตัวที่เท่าไหร
ค่าคงที่สตริง คือ ตัวอักขระ (characters) ใด ๆ ที่เขียนอยู่ภายใต้เครื่องหมาย “ “ (double quotation)
ตัวแปรสตริง คือ ตัวแปรชุดที่เก็บค่าคงที่ชนิดสตริง โดยมีชนิดของตัวแปรชุดเป็น char
ฟังก์ชันที่ใช้งานเกี่ยวกับสตริง (string functions) ที่สำคัญ ๆ มีดังนี้
strlen( ) เป็นฟังก์ที่ใช้นับความยาวของค่าคงที่สตริง หรือตัวแปรสตริง
strcmp( ) เป็นฟังก์ชันที่ใช้เปรียบเทียบข้อมูลชนิดสตริง 2 ค่า ว่ามีค่าเท่ากัน หรือมากกว่า หรือน้อยกว่าอย่างใดอย่างหนึ่ง ซึ่งการเปรียบเทียบสตริงจะใช้ค่ารหัส ASCII เปรียบเทียบทีละตัวอักขระ
strcpy( ) เป็นฟังก์ชันที่ใช้คัดลอกข้อมูลจาก string ค่าหนึ่งไปยัง string อีกค่าหนึ่ง
strcat( ) เป็นฟังก์ชันที่ใช้เชื่อมค่าคงที่ชนิดสตริง 2 ค่า เข้าด้วยกัน โดยผลลัพธ์จะเก็บเอาไว้ในตัวแปรสตริงตัวแรกเสมอ