สตริงใน C: วิธีประกาศและเริ่มต้นตัวแปรสตริงใน C
สตริงในภาษา C คืออะไร?
A สตริงในC เป็นเพียงชุดของอักขระในลำดับเชิงเส้น 'C' จะถือว่าสตริงเป็นข้อมูลเดียวเสมอ แม้ว่าจะมีช่องว่างก็ตาม อักขระตัวเดียวจะถูกกำหนดโดยใช้เครื่องหมายคำพูดเดี่ยว สตริงจะถูกแสดงโดยใช้เครื่องหมายคำพูดคู่
Example, "Welcome to the world of programming!"
'C' จัดทำไลบรารีมาตรฐาน ที่มีฟังก์ชันต่างๆ มากมายที่สามารถใช้ดำเนินการที่ซับซ้อนบนสตริงในภาษา C ได้อย่างง่ายดาย
จะประกาศสตริงในภาษา C ได้อย่างไร?
AC String เป็นอาร์เรย์ธรรมดาที่มีอักขระเป็นชนิดข้อมูล ภาษาซี ไม่รองรับสตริงเป็นชนิดข้อมูลโดยตรง ดังนั้นในการแสดงสตริงในภาษา C คุณต้องใช้อาเรย์อักขระ
ไวยากรณ์ทั่วไปสำหรับการประกาศตัวแปรเป็นสตริงในภาษา C มีดังนี้
char string_variable_name [array_size];
การประกาศสตริงแบบคลาสสิกสามารถทำได้ดังนี้:
char string_name[string_length] = "string";
ต้องกำหนดขนาดของอาร์เรย์ในขณะที่ประกาศตัวแปรสตริง C เนื่องจากใช้ในการคำนวณจำนวนอักขระที่จะจัดเก็บภายในตัวแปรสตริงในภาษาซี ตัวอย่างการประกาศสตริงที่ถูกต้องบางส่วนมีดังนี้
char first_name[15]; //declaration of a string variable char last_name[15];
ตัวอย่างข้างต้นแสดงถึงตัวแปรสตริงที่มีขนาดอาร์เรย์ 15 ซึ่งหมายความว่าอาร์เรย์สตริง C ที่กำหนดสามารถเก็บอักขระได้สูงสุด 15 ตัว การจัดทำดัชนีของอาร์เรย์เริ่มต้นจาก 0 ดังนั้นจะจัดเก็บอักขระจากตำแหน่ง 0-14 คอมไพเลอร์ C จะเพิ่มอักขระ NULL '\0' ให้กับอาร์เรย์อักขระที่สร้างขึ้นโดยอัตโนมัติ
จะเริ่มต้นสตริงในภาษา C ได้อย่างไร?
มาศึกษาการเริ่มต้นสตริงในภาษา C กัน ตัวอย่างต่อไปนี้จะสาธิตการเริ่มต้นสตริงในภาษา C
char first_name[15] = "ANTHONY"; char first_name[15] = {'A','N','T','H','O','N','Y','\0'}; // NULL character '\0' is required at end in this declaration char string1 [6] = "hello";/* string size = 'h'+'e'+'l'+'l'+'o'+"NULL" = 6 */ char string2 [ ] = "world"; /* string size = 'w'+'o'+'r'+'l'+'d'+"NULL" = 6 */ char string3[6] = {'h', 'e', 'l', 'l', 'o', '\0'} ; /*Declaration as set of characters ,Size 6*/
ใน string3 ต้องเพิ่มอักขระ NULL อย่างชัดเจน และอักขระจะอยู่ในเครื่องหมายคำพูดเดี่ยว
'C' ยังช่วยให้เราสามารถเริ่มต้น ตัวแปรสตริง โดยไม่ต้องกำหนดขนาดของอาร์เรย์อักขระ สามารถทำได้ดังนี้
char first_name[ ] = "NATHAN";
ชื่อของ Strings ในภาษา C ทำหน้าที่เป็นตัวชี้เนื่องจากโดยพื้นฐานแล้วมันคืออาร์เรย์
อินพุตสตริง C: โปรแกรม C เพื่ออ่านสตริง
เมื่อเขียนโปรแกรมเชิงโต้ตอบที่ขอให้ผู้ใช้ป้อนข้อมูล C จะให้ฟังก์ชัน scanf(), gets() และ fgets() เพื่อค้นหาบรรทัดข้อความที่ป้อนจากผู้ใช้
เมื่อเราใช้ scanf() เพื่ออ่าน เราจะใช้ตัวระบุรูปแบบ “%s” โดยไม่ใช้ “&” เพื่อเข้าถึงที่อยู่ตัวแปร เนื่องจากชื่ออาร์เรย์ทำหน้าที่เป็นตัวชี้
ตัวอย่างเช่น:
#include <stdio.h> int main() { char name[10]; int age; printf("Enter your first name and age: \n"); scanf("%s %d", name, &age); printf("You entered: %s %d",name,age); }
Output:
Enter your first name and age: John_Smith 48
ปัญหาของฟังก์ชัน scanf คือ มันไม่เคยอ่านสตริงทั้งหมดใน C โดยจะหยุดกระบวนการอ่านทันทีที่ช่องว่าง การป้อนแบบฟอร์ม แท็บแนวตั้ง การขึ้นบรรทัดใหม่ หรือการขึ้นบรรทัดใหม่เกิดขึ้น สมมติว่าเราป้อนข้อมูลเป็น "Guru99 Tutorials" จากนั้นฟังก์ชัน scanf จะไม่อ่านสตริงทั้งหมดเนื่องจากอักขระช่องว่างเกิดขึ้นระหว่างสองชื่อ ฟังก์ชั่น scanf จะอ่านเท่านั้น Guru99.
หากต้องการอ่านสตริงที่มีการเว้นวรรค เราใช้ฟังก์ชัน gets() Gets ละเว้นช่องว่าง มันหยุด
อ่านเมื่อถึงบรรทัดใหม่ (กดปุ่ม Enter)
ตัวอย่างเช่น:
#include <stdio.h> int main() { char full_name[25]; printf("Enter your full name: "); gets(full_name); printf("My full name is %s ",full_name); return 0; }
Output:
Enter your full name: Dennis Ritchie My full name is Dennis Ritchie
อีกทางเลือกหนึ่งที่ปลอดภัยกว่าสำหรับ gets() คือฟังก์ชัน fgets() ซึ่งจะอ่านอักขระตามจำนวนที่ระบุ
ตัวอย่างเช่น:
#include <stdio.h> int main() { char name[10]; printf("Enter your name plz: "); fgets(name, 10, stdin); printf("My name is %s ",name); return 0;}
Output:
Enter your name plz: Carlos My name is Carlos
อาร์กิวเมนต์ fgets() คือ:
- ชื่อสตริง
- จำนวนตัวอักษรที่จะอ่าน
- stdin หมายถึงการอ่านจากอินพุตมาตรฐานซึ่งเป็นคีย์บอร์ด
C String Output: โปรแกรม C เพื่อพิมพ์สตริง
ฟังก์ชัน printf มาตรฐานใช้สำหรับการพิมพ์หรือแสดงสตริงในภาษา C บนอุปกรณ์เอาท์พุต ตัวระบุรูปแบบที่ใช้คือ %s
ตัวอย่าง,
printf("%s", name);
เอาต์พุตสตริงเสร็จสิ้นด้วยฟังก์ชัน fputs() และ printf()
ฟังก์ชัน fputs()
fputs() ต้องการชื่อของสตริงและตัวชี้ไปยังตำแหน่งที่คุณต้องการแสดงข้อความ เราใช้ stdout ซึ่งหมายถึงเอาต์พุตมาตรฐานเพื่อพิมพ์ไปที่หน้าจอ
ตัวอย่างเช่น:
#include <stdio.h> int main() {char town[40]; printf("Enter your town: "); gets(town); fputs(town, stdout); return 0;}
Output:
Enter your town: New York New York
ทำให้ฟังก์ชัน
ฟังก์ชัน puts ใช้เพื่อพิมพ์สตริงในภาษา C บนอุปกรณ์เอาต์พุตและเลื่อนเคอร์เซอร์กลับไปยังตำแหน่งแรก ฟังก์ชัน puts สามารถใช้ได้ในลักษณะต่อไปนี้
#include <stdio.h> int main() { char name[15]; gets(name); //reads a string puts(name); //displays a string return 0;}
ไวยากรณ์ของฟังก์ชันนี้ค่อนข้างง่ายกว่าฟังก์ชันอื่นๆ
ไลบรารีสตริง
ไลบรารี 'C' มาตรฐานมีฟังก์ชันต่างๆ เพื่อจัดการสตริงภายในโปรแกรม ฟังก์ชันเหล่านี้เรียกอีกอย่างว่าเป็นตัวจัดการสตริง ตัวจัดการทั้งหมดเหล่านี้ปรากฏอยู่ข้างใน ไฟล์ส่วนหัว
ฟังก์ชัน | จุดมุ่งหมาย |
---|---|
สเตรเลน() | ฟังก์ชันนี้ใช้สำหรับค้นหาความยาวของสตริง มันจะส่งคืนจำนวนอักขระที่มีอยู่ในสตริงโดยไม่รวมอักขระ NULL |
strcat(str1, str2) | ฟังก์ชันนี้ใช้สำหรับรวมสองสายเข้าด้วยกันให้เป็นสตริงเดียว มันจะต่อท้ายหรือต่อ str2 ต่อท้าย str1 และส่งกลับตัวชี้ไปที่ str1 |
strcmp(str1, str2) | ฟังก์ชันนี้ใช้เพื่อเปรียบเทียบสองสตริงระหว่างกัน จะส่งกลับ 0 ถ้า str1 เท่ากับ str2 น้อยกว่า 0 ถ้า str1 < str2 และมากกว่า 0 ถ้า str1 > str2 |
ให้พิจารณาโปรแกรมด้านล่างซึ่งสาธิตฟังก์ชันไลบรารีสตริง:
#include <stdio.h> #include <string.h> int main () { //string initialization char string1[15]="Hello"; char string2[15]=" World!"; char string3[15]; int val; //string comparison val= strcmp(string1,string2); if(val==0){ printf("Strings are equal\n"); } else{ printf("Strings are not equal\n"); } //string concatenation printf("Concatenated string:%s",strcat(string1,string2)); //string1 contains hello world! //string length printf("\nLength of first string:%d",strlen(string1)); printf("\nLength of second string:%d",strlen(string2)); //string copy printf("\nCopied string is:%s\n",strcpy(string3,string1)); //string1 is copied into string3 return 0; }
Output:
Strings are not equal Concatenated string:Hello World! Length of first string:12 Length of second string:7 Copied string is:Hello World!
ฟังก์ชั่นห้องสมุดที่สำคัญอื่น ๆ ได้แก่ :
- strncmp(str1, str2, n) : มันจะคืนค่า 0 ถ้าอักขระ n ตัวแรกของ str1 เท่ากับอักขระ n ตัวแรกของ str2 น้อยกว่า 0 ถ้า str1 < str2 และมากกว่า 0 ถ้า str1 > str2
- strncpy(str1, str2, n) ฟังก์ชันนี้ใช้เพื่อคัดลอกสตริงจากสตริงอื่น คัดลอกอักขระ n ตัวแรกของ str2 ไปยัง str1
- strchr(str1, c): มันจะคืนค่าตัวชี้ไปยังการปรากฏครั้งแรกของถ่าน c ใน str1 หรือคืนค่า NULL หากไม่พบอักขระ
- strrchr(str1, c): ค้นหา str1 ในแบบย้อนกลับและส่งกลับตัวชี้ไปที่ตำแหน่งของถ่าน c ใน str1 หรือ NULL หากไม่พบอักขระ
- strstr(str1, str2): ส่งคืนตัวชี้ไปยังการปรากฏครั้งแรกของ str2 ใน str1 หรือ NULL หากไม่พบ str2
- strncat(str1, str2, n) ต่อท้าย (ต่อท้าย) อักขระ n ตัวแรกของ str2 ต่อท้าย str1 และส่งกลับตัวชี้ไปที่ str1
- strlwr() : เพื่อแปลงสตริงเป็นตัวพิมพ์เล็ก
- strupr() : เพื่อแปลงสตริงเป็นตัวพิมพ์ใหญ่
- strrev() : เพื่อย้อนกลับสตริง
การแปลงสตริงให้เป็นตัวเลข
ในการเขียนโปรแกรม C เราสามารถแปลงสตริงของอักขระตัวเลขเป็นค่าตัวเลขเพื่อป้องกันข้อผิดพลาดระหว่างรันไทม์ ไลบรารี stdio.h ประกอบด้วยฟังก์ชันต่อไปนี้สำหรับการแปลงสตริงเป็นตัวเลข:
- int atoi(str) ย่อมาจาก ASCII เป็นจำนวนเต็ม โดยจะแปลง str ให้เป็นค่า int ที่เทียบเท่า ถ้าตัวอักขระแรกไม่ใช่ตัวเลขหรือไม่พบตัวเลขใดๆ จะส่งคืนค่า 0
- double atof(str) ย่อมาจาก ASCII ที่เป็น float โดยจะแปลง str ให้เป็นค่า double ที่เทียบเท่า ถ้าตัวอักขระแรกไม่ใช่ตัวเลขหรือไม่พบตัวเลขใดๆ เลย จะส่งกลับ 0.0
- long int atol(str) ย่อมาจาก ASCII เป็น long int แปลง str ให้เป็นค่าเลขจำนวนเต็มแบบ long ที่เทียบเท่า ถ้าตัวอักขระแรกไม่ใช่ตัวเลขหรือไม่พบตัวเลขใดๆ เลย จะส่งคืนค่า 0
โปรแกรมต่อไปนี้สาธิตฟังก์ชัน atoi():
#include <stdio.h> int main() {char *string_id[10]; int ID; printf("Enter a number: "); gets(string_id); ID = atoi(string_id); printf("you enter %d ",ID); return 0;}
Output:
Enter a number: 221348 you enter 221348
- การประกาศตัวชี้สตริง เช่น char *string = “ภาษา” เป็นค่าคงที่และไม่สามารถแก้ไขได้
สรุป
- สตริงคือลำดับของอักขระที่จัดเก็บไว้ในอาร์เรย์อักขระ
- สตริงคือข้อความที่อยู่ในเครื่องหมายคำพูดคู่
- อักขระเช่น 'd' ไม่ใช่สตริงและระบุด้วยเครื่องหมายคำพูดเดี่ยว
- 'C' จัดเตรียมฟังก์ชันไลบรารีมาตรฐานเพื่อจัดการสตริงในโปรแกรม เครื่องมือจัดการสตริงจะถูกเก็บไว้ใน ไฟล์ส่วนหัว
- สตริงจะต้องถูกประกาศหรือเตรียมใช้งานก่อนนำไปใช้ในโปรแกรม
- มีฟังก์ชันสตริงอินพุตและเอาต์พุตที่แตกต่างกัน โดยแต่ละฟังก์ชันมีคุณสมบัติของตัวเอง
- อย่าลืมรวมไลบรารีสตริงเพื่อทำงานกับฟังก์ชันต่างๆ
- เราสามารถแปลงสตริงเป็นตัวเลขผ่าน atoi(), atof() และ atol() ซึ่งมีประโยชน์มากสำหรับกระบวนการเข้ารหัสและถอดรหัส
- เราสามารถจัดการสตริงต่างๆ ได้โดยกำหนดอาร์เรย์ของสตริงในภาษา C