Skip to content

Latest commit

 

History

History
109 lines (84 loc) · 6.35 KB

File metadata and controls

109 lines (84 loc) · 6.35 KB

String ในภาษา C

  • string ในที่นี้หมายถึง char [] ไม่เกี่ยวข้องกับ string ใน #include <string> ของ C++
  • #include <string.h> เป็นของ C ต่างจาก #include <string> ที่เป็นของ C++

การทำงานของ string ในรูปแบบ array

  • string ที่เราใช้กันในห้องเรียน เราจะประกาศในรูปของ array of character เช่น char name[51];
  • โดยทั่วไป string ในภาษา C จะจบด้วย \0 เพื่อความสะดวกในการใช้ฟังก์ชันต่างๆของภาษา C
    • ปกติเวลารับข้อความด้วย scanf ระบบจะเติม \0 เป็นตัวสุดท้ายอัตโนมัติ
    • เวลา printf ระบบจะปรินท์ทีละตัวตั้งแต่ตัวแรกของ array จนกว่าจะเจอ \0 จึงหยุด
    • ฟังก์ชันอื่นๆ เช่น strlen ก็ทำงานโดยการ loop ไปเรื่อยๆจนกว่าจะเจอ \0
    • หากไม่มี \0 โปรแกรมอาจพยายามอ่านไปเรื่อยๆ เกินไปส่วนความจำอื่นๆ ของคอมพิวเตอร์
  • การประกาศตัวแปร string สามารถทำได้เหมือน array คือการระบุที่ละตัว
char text[] = { 'h', 'e', 'l', 'l', 'o', '\0' }; // ประกาษ string text ที่มีขนาด 6 (ใช้ได้จริงแค่ 5)
char text2[6] = { 'h' }; // ประกาศ string text2 ที่รองรับใช้ได้จริงมากสุด 5 ตัว แต่ตอนนี้ใช้เพียงแค่ตัวเดียว
// ปกติตัวอื่นๆจะใส่เป็น 0 (`\0`) ให้โดยอัตโนมัติ
  • สามารถประกาศได้โดยระบุข้อความภายในเครื่องหมายคำพูด " "
char text[] = "hello"; // เหมือนกับข้างบนทุกประการ
  • ไม่สามารถคัดลอกได้ด้วยเครื่องหมายเท่ากับ = (ดูหัวข้อถัดไป)

ฟังก์ชันที่เกี่ยวข้องกับ string

  • ต้อง #include <string.h> จึงจะใช้ฟังก์ชัน string ต่างๆ ได้

strlen

  • ใช้ในรูปแบบ strlen(text) โดย text เป็นตัวแปร char []
  • ใช้หาความยาวของ string (ไม่รวม \0)

ตัวอย่าง

char str[] = "hello, world";
int length = strlen(str);
printf("%s is %d letters long.", str, length);
  • สามารถใช้กับการ loop ให้ครบทั้ง string ได้

ตัวอย่าง

// ปรินท์ตัวละ 1 บรรทัด
for (int i = 0; i < strlen(str); i++)
    printf("%c\n", str[i])

strcpy

  • ใช้ในรูปแบบ strcpy(dest, src) เมื่อ src เป็นข้อมูลต้นฉบับและ dest คือตำแหน่งที่ต้องการคัดลอกไปใส่
  • ใช้คัดลอกข้อความจาก src ไปทับที่ dest

ตัวอย่าง

char text[10];
char text2[] = "hello";
strcpy(text, text2);
printf("%s", text); // hello

strcat

  • ใช้ในรูปแบบ strcat(dest, src) เมื่อ src เป็น string ที่ต้องการนำไปต่อท้าย dest
  • ใช้นำข้อความจาก src ไปต่อท้ายข้อความเดิมที่ dest

ตัวอย่าง

char text[] = "hello";
char text2[] = ", world";
strcat(text, text2);
printf("%s", text); // hello, world

strcmp

  • ใช้ในรูปแบบ strcmp(s1, s2) เมื่อ s1 และ s2 เป็น string ที่ต้องการเปรียบเทียบ
  • เปรียบเทียบข้อความว่าเหมือนกันหรือไม่ ถ้าเหมือนกัน จะคืนค่า 0 ถ้าไม่เหมือนจะคืนค่าอื่นๆ ที่ไม่ใช่ 0
  • ไม่สามารถเปรียบเทียบด้วย s1 == s2 เนื่องจากจะกลายเป็นการเปรียบเทียบ pointer แทน

ตัวอย่าง

char password[50];
printf("Register your password: ");
scanf("%s", password);

char login[50];
printf("Type password to login: ");
scanf("%s", login);

if (strcmp(password, login) != 0)
    printf("Wrong password.");

ฟังก์ชันที่เกี่ยวข้องกับ char

  • ต้อง #include <ctype.h> จึงจะใช้ฟังก์ชันในหัวข้อนี้ได้

  • ใช้ได้กับ char เพียงเท่านั้น ดังนั้น ถ้าต้องการเช็ค string ต้องใช้ loop เช็คทีละตัวอักษร

  • ยกตัวอย่างเพียงบางส่วนเท่านั้น

  • isupper(c) เป็นจริงเมื่อ c เป็นอักษร A-Z พิมพ์ใหญ่

  • islower(c) เป็นจริงเมื่อ c เป็นอักษร a-z พิมพ์เล็ก

  • isalpha(c) เป็นจริงเมื่อ c เป็น A-Z หรือ a-z

  • isdigit(c) เป็นจริงเมื่อ c เป็นตัวเลข 0-9

  • toupper(c) เปลี่ยน c ให้เป็นอักษรพิมพ์ใหญ่

  • tolower(c) เปลี่ยน c ให้เป็นอักษรพิมพ์เล็ก