- string ในที่นี้หมายถึง
char []ไม่เกี่ยวข้องกับstringใน#include <string>ของ C++ #include <string.h>เป็นของ C ต่างจาก#include <string>ที่เป็นของ C++
- 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"; // เหมือนกับข้างบนทุกประการ- ไม่สามารถคัดลอกได้ด้วยเครื่องหมายเท่ากับ = (ดูหัวข้อถัดไป)
- ต้อง
#include <string.h>จึงจะใช้ฟังก์ชัน string ต่างๆ ได้
- ใช้ในรูปแบบ
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(dest, src)เมื่อ src เป็นข้อมูลต้นฉบับและ dest คือตำแหน่งที่ต้องการคัดลอกไปใส่ - ใช้คัดลอกข้อความจาก src ไปทับที่ dest
ตัวอย่าง
char text[10];
char text2[] = "hello";
strcpy(text, text2);
printf("%s", text); // hello- ใช้ในรูปแบบ
strcat(dest, src)เมื่อ src เป็น string ที่ต้องการนำไปต่อท้าย dest - ใช้นำข้อความจาก src ไปต่อท้ายข้อความเดิมที่ dest
ตัวอย่าง
char text[] = "hello";
char text2[] = ", world";
strcat(text, text2);
printf("%s", text); // hello, world- ใช้ในรูปแบบ
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.");-
ต้อง
#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 ให้เป็นอักษรพิมพ์เล็ก