สตริงใน 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