Chuỗi trong C là gì?
Một String trong C là gì, nhưng một tập hợp các ký tự trong một chuỗi tuyến tính. 'C' luôn xử lý một chuỗi là một dữ liệu duy nhất mặc dù nó chứa khoảng trắng. Một ký tự được xác định bằng cách sử dụng biểu diễn trích dẫn duy nhất. Một chuỗi được biểu diễn bằng cách sử dụng dấu ngoặc kép.
Example, "Welcome to the world of programming!"
'C' cung cấp thư viện chuẩn
Trong hướng dẫn này, bạn sẽ học-
- Cách khai báo và khởi tạo chuỗi trong C
- Đầu vào chuỗi: Đọc một chuỗi
- Đầu ra chuỗi: In / Hiển thị một chuỗi
- hàm fputs ()
- đặt chức năng
- Thư viện chuỗi
- Chuyển đổi một chuỗi thành một số
Cách khai báo và khởi tạo chuỗi trong C
Chuỗi AC là một mảng đơn giản với kiểu dữ liệu là char. Ngôn ngữ 'C' không hỗ trợ trực tiếp chuỗi như một kiểu dữ liệu. Do đó, để hiển thị một Chuỗi trong C, bạn cần sử dụng một mảng ký tự.
Cú pháp chung để khai báo một biến dưới dạng Chuỗi trong C như sau,
char string_variable_name [array_size];
Khai báo chuỗi cổ điển có thể được thực hiện như sau:
char string_name[string_length] = "string";
Kích thước của một mảng phải được xác định trong khi khai báo biến Chuỗi C vì nó được sử dụng để tính toán có bao nhiêu ký tự sẽ được lưu trữ bên trong biến chuỗi trong C. Một số ví dụ hợp lệ về khai báo chuỗi như sau,
char first_name[15]; //declaration of a string variablechar last_name[15];
Ví dụ trên đại diện cho các biến chuỗi có kích thước mảng là 15. Điều này có nghĩa là mảng chuỗi C đã cho có khả năng chứa tối đa 15 ký tự. Việc lập chỉ mục của mảng bắt đầu từ 0 do đó nó sẽ lưu trữ các ký tự từ vị trí 0-14. Trình biên dịch C tự động thêm ký tự NULL '\ 0' vào mảng ký tự được tạo.
Chúng ta hãy nghiên cứu cách khởi tạo Chuỗi trong C. Ví dụ sau minh họa việc khởi tạo Chuỗi trong 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 declarationchar 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*/
Trong string3, ký tự NULL phải được thêm rõ ràng và các ký tự được đặt trong dấu ngoặc kép.
'C' cũng cho phép chúng ta khởi tạo một biến chuỗi mà không cần xác định kích thước của mảng ký tự. Nó có thể được thực hiện theo cách sau,
char first_name[ ] = "NATHAN";
Tên của Strings trong C hoạt động như một con trỏ vì về cơ bản nó là một mảng.
Đầu vào chuỗi: Đọc một chuỗi
Khi viết các chương trình tương tác yêu cầu người dùng nhập liệu, C cung cấp các hàm scanf (), get () và fgets () để tìm một dòng văn bản được nhập từ người dùng.
Khi chúng ta sử dụng scanf () để đọc, chúng ta sử dụng định dạng "% s" mà không sử dụng "&" để truy cập địa chỉ biến vì tên mảng hoạt động như một con trỏ. Ví dụ:
#includeint 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);}
Đầu ra:
Enter your first name and age:John_Smith 48
Vấn đề với hàm scanf là nó không bao giờ đọc toàn bộ Chuỗi trong C. Nó sẽ tạm dừng quá trình đọc ngay khi khoảng trắng, nguồn cấp dữ liệu biểu mẫu, tab dọc, dòng mới hoặc dấu xuống dòng xảy ra. Giả sử chúng ta đưa đầu vào là "Hướng dẫn Guru99" thì hàm scanf sẽ không bao giờ đọc toàn bộ một chuỗi vì ký tự khoảng trắng xuất hiện giữa hai tên. Hàm scanf sẽ chỉ đọc Guru99.
Để đọc một chuỗi có chứa khoảng trắng, chúng ta sử dụng hàm get (). Được bỏ qua khoảng trắng. Nó sẽ dừng đọc khi đạt đến dòng mới (phím Enter được nhấn). Ví dụ:
#includeint main() {char full_name[25];printf("Enter your full name: ");gets(full_name);printf("My full name is %s ",full_name);return 0;}
Đầu ra:
Enter your full name: Dennis RitchieMy full name is Dennis Ritchie
Một thay thế an toàn hơn cho hàm get () là hàm fgets () đọc một số ký tự được chỉ định. Ví dụ:
#includeint main() {char name[10];printf("Enter your name plz: ");fgets(name, 10, stdin);printf("My name is %s ",name);return 0;}
Đầu ra:
Enter your name plz: CarlosMy name is Carlos
Các đối số fgets () là:
- tên chuỗi,
- số lượng ký tự để đọc,
- stdin có nghĩa là đọc từ đầu vào chuẩn là bàn phím.
Đầu ra chuỗi: In / Hiển thị một chuỗi
Hàm printf tiêu chuẩn được sử dụng để in hoặc hiển thị các Chuỗi trong C trên thiết bị đầu ra. Thông số định dạng được sử dụng là% s
Thí dụ,
printf("%s", name);
Đầu ra chuỗi được thực hiện với hàm fputs () và printf ().
hàm fputs ()
Fputs () cần tên của chuỗi và một con trỏ đến nơi bạn muốn hiển thị văn bản. Chúng tôi sử dụng stdout đề cập đến đầu ra tiêu chuẩn để in ra màn hình.
#includeint main(){char town[40];printf("Enter your town: ");gets(town);fputs(town, stdout);return 0;}
Đầu ra:
Enter your town: New YorkNew York
đặt chức năng
Hàm put được sử dụng để In chuỗi trong C trên thiết bị đầu ra và di chuyển con trỏ trở lại vị trí đầu tiên. Một hàm đặt có thể được sử dụng theo cách sau,
#includeint main() {char name[15];gets(name); //reads a stringputs(name); //displays a stringreturn 0;}
Cú pháp của hàm này tương đối đơn giản hơn các hàm khác.
Thư viện chuỗi
Thư viện 'C' tiêu chuẩn cung cấp các chức năng khác nhau để thao tác các chuỗi trong một chương trình. Các hàm này còn được gọi là trình xử lý chuỗi. Tất cả các trình xử lý này đều có trong tệp tiêu đề
Chức năng | Mục đích |
strlen () | Hàm này được sử dụng để tìm độ dài của một chuỗi. Nó trả về số lượng ký tự có trong một chuỗi ngoại trừ ký tự NULL. |
strcat (str1, str2) | Hàm này được sử dụng để kết hợp hai chuỗi với nhau để tạo thành một chuỗi duy nhất. Nó Thêm hoặc nối str2 vào cuối str1 và trả về một con trỏ tới str1. |
strcmp (str1, str2) | Hàm này dùng để so sánh hai chuỗi với nhau. Nó trả về 0 nếu str1 bằng str2, nhỏ hơn 0 nếu str1 |
Hãy xem xét chương trình dưới đây trình bày các hàm thư viện chuỗi:
#include#include int main () {//string initializationchar string1[15]="Hello";char string2[15]=" World!";char string3[15];int val;//string comparisonval= strcmp(string1,string2);if(val==0){printf("Strings are equal\n");}else{printf("Strings are not equal\n");}//string concatenationprintf("Concatenated string:%s",strcat(string1,string2)); //string1 contains hello world!//string lengthprintf("\nLength of first string:%d",strlen(string1));printf("\nLength of second string:%d",strlen(string2));//string copyprintf("\nCopied string is:%s\n",strcpy(string3,string1)); //string1 is copied into string3return 0;}
Đầu ra:
Strings are not equalConcatenated string:Hello World!Length of first string:12Length of second string:7Copied string is:Hello World!
Các chức năng thư viện quan trọng khác là:
- strncmp (str1, str2, n): trả về 0 nếu n ký tự đầu tiên của str1 bằng n ký tự đầu tiên của str2, nhỏ hơn 0 nếu str1
str2. - strncpy (str1, str2, n) Hàm này được sử dụng để sao chép một chuỗi từ một chuỗi khác. Sao chép n ký tự đầu tiên của str2 sang str1
- strchr (str1, c): nó trả về một con trỏ đến lần xuất hiện đầu tiên của char c trong str1, hoặc NULL nếu không tìm thấy ký tự.
- strrchr (str1, c): nó tìm kiếm ngược lại str1 và trả về một con trỏ đến vị trí của char c trong str1, hoặc NULL nếu không tìm thấy ký tự.
- strstr (str1, str2): nó trả về một con trỏ đến lần xuất hiện đầu tiên của str2 trong str1, hoặc NULL nếu không tìm thấy str2.
- strncat (str1, str2, n) Nối (nối) n ký tự đầu tiên của str2 vào cuối str1 và trả về một con trỏ tới str1.
- strlwr (): để chuyển đổi chuỗi thành chữ thường
- strupr (): để chuyển đổi chuỗi thành chữ hoa
- strrev (): để đảo ngược chuỗi
Chuyển đổi một chuỗi thành một số
Trong lập trình C, chúng ta có thể chuyển đổi một chuỗi ký tự số thành giá trị số để tránh lỗi thời gian chạy. Thư viện stdio.h chứa các hàm sau để chuyển đổi một chuỗi thành một số:
- int atoi (str) Viết tắt của ASCII thành số nguyên; nó chuyển đổi str thành giá trị int tương đương. 0 được trả về nếu ký tự đầu tiên không phải là số hoặc không gặp số nào.
- double atof (str) Viết tắt của ASCII để float, nó chuyển đổi str thành giá trị kép tương đương. 0.0 được trả về nếu ký tự đầu tiên không phải là số hoặc không gặp phải số nào.
- long int atol (str) Viết tắt của ASCII thành long int, Chuyển đổi str thành giá trị số nguyên dài tương đương. 0 được trả về nếu ký tự đầu tiên không phải là số hoặc không gặp số nào.
Chương trình sau thể hiện hàm atoi ():
#includeint 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;}
Đầu ra:
Enter a number: 221348you enter 221348
- Khai báo con trỏ chuỗi chẳng hạn như char * string = "language" là một hằng số và không thể sửa đổi.
Tóm lược
- Chuỗi là một chuỗi các ký tự được lưu trữ trong một mảng ký tự.
- Chuỗi là một văn bản được đặt trong dấu ngoặc kép.
- Một ký tự như 'd' không phải là một chuỗi và nó được biểu thị bằng dấu ngoặc kép.
- 'C' cung cấp các hàm thư viện tiêu chuẩn để thao tác các chuỗi trong một chương trình. Trình điều khiển chuỗi được lưu trữ trong tệp tiêu đề
. - Một chuỗi phải được khai báo hoặc khởi tạo trước khi sử dụng vào một chương trình.
- Có các chức năng chuỗi đầu vào và đầu ra khác nhau, mỗi chức năng trong số chúng đều có các tính năng của nó.
- Đừng quên bao gồm thư viện chuỗi để hoạt động với các chức năng của nó
- Chúng ta có thể chuyển đổi chuỗi thành số thông qua atoi (), atof () và atol (), rất hữu ích cho quá trình mã hóa và giải mã.
- Chúng ta có thể thao tác các chuỗi khác nhau bằng cách xác định một mảng chuỗi trong C.