Chuỗi trong C: Cách khai báo và khởi tạo biến chuỗi trong C
Chuỗi trong C là gì?
A Chuỗi trong C không gì khác ngoài một tập hợp các ký tự theo trình tự tuyến tính. 'C' luôn coi 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ự duy nhất được định nghĩa bằng cách sử dụng biểu diễn dấu ngoặc đơn. Một chuỗi được biểu diễn bằng dấu ngoặc kép.
Example, "Welcome to the world of programming!"
'C' cung cấp thư viện chuẩn chứa nhiều hàm có thể được sử dụng để thực hiện các thao tác phức tạp một cách dễ dàng trên Chuỗi trong C.
Làm thế nào để khai báo một chuỗi trong C?
Chuỗi AC là một mảng đơn giản với kiểu dữ liệu char. 'Ngôn ngữ C không hỗ trợ trực tiếp chuỗi dưới dạng kiểu dữ liệu. Do đó, để hiển thị Chuỗi trong C, bạn cần sử dụng 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 số lượng 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 variable char last_name[15];
Ví dụ trên biểu thị 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.
Làm cách nào để khởi tạo một chuỗi trong C?
Chúng ta hãy nghiên cứu việc khởi tạo String trong C. Ví dụ sau đây minh họa việc khởi tạo String 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 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*/
Trong chuỗi 3, ký tự NULL phải được thêm rõ ràng và các ký tự được đặt trong dấu ngoặc đơn.
'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ự. Có thể thực hiện theo cách sau,
char first_name[ ] = "NATHAN";
Tên String trong C đóng vai trò như một con trỏ vì về cơ bản nó là một mảng.
Đầu vào chuỗi C: Chương trình C để đọc 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 dữ liệu, C cung cấp các hàm scanf(), gets() và fgets() để tìm dòng văn bản được người dùng nhập vào.
Khi sử dụng scanf() để đọc, chúng tôi sử dụng công cụ xác định định dạng “%s” mà không sử dụng “&” để truy cập địa chỉ biến vì tên mảng đóng vai trò như một con trỏ.
Ví dụ:
#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);
}
Đầ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 xảy ra khoảng trắng, nguồn cấp dữ liệu biểu mẫu, tab dọc, dòng mới hoặc trả về đầu dòng. Giả sử chúng ta cung cấp thông tin đầu vào là “Hướng dẫn Guru99” thì hàm scanf sẽ không bao giờ đọc toàn bộ chuỗi vì ký tự khoảng trắng xuất hiện giữa hai tên. Chức năng scanf sẽ chỉ đọc Guru99.
Để đọc một chuỗi chứa khoảng trắng, chúng ta sử dụng hàm gets(). Được bỏ qua các khoảng trắng. Nó dừng lại
đọc khi đến dòng mới (nhấn phím Enter).
Ví dụ:
#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;
}
Đầu ra:
Enter your full name: Dennis Ritchie My full name is Dennis Ritchie
Một cách khác an toàn hơn cho get() là hàm fgets() đọc một số ký tự được chỉ định.
Ví dụ:
#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;}
Đầu ra:
Enter your name plz: Carlos My name is Carlos
Các đối số fgets() là:
- tên chuỗi,
- số lượng ký tự cần đọc,
- stdin có nghĩa là đọc từ đầu vào tiêu chuẩn là bàn phím.
Đầu ra chuỗi C: Chương trình C để in một chuỗi
Hàm printf tiêu chuẩn được sử dụng để in hoặc hiển thị Chuỗi trong C trên thiết bị đầu ra. Trình xác định định dạng được sử dụng là %s
Thí dụ,
printf("%s", name);
Việc xuất chuỗi được thực hiện bằng các hàm fputs() và printf().
hàm fputs()
fputs() cần tên của chuỗi và một con trỏ tới nơi bạn muốn hiển thị văn bản. Chúng tôi sử dụng thiết bị xuất chuẩn để chỉ đầu ra tiêu chuẩn để in ra màn hình.
Ví dụ:
#include <stdio.h>
int main()
{char town[40];
printf("Enter your town: ");
gets(town);
fputs(town, stdout);
return 0;}
Đầu ra:
Enter your town: New York New York
đặt chức năng
Hàm puts đượ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. Hàm puts có thể được sử dụng theo cách sau:
#include <stdio.h>
int main() {
char name[15];
gets(name); //reads a string
puts(name); //displays a string
return 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 nhiều hàm khác nhau để thao tác với các chuỗi trong một chương trình. Các hàm này còn được gọi là hàm xử lý chuỗi. Tất cả các trình xử lý này đều có mặt bên trong tập tin 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 không bao gồm ký tự NULL. |
| strcat(str1, str2) | Hàm này được sử dụng để kết hợp hai chuỗi lại với nhau để tạo thành một chuỗi duy nhất. Nó nối 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 được sử 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 < str2 và lớn hơn 0 nếu str1 > str2. |
Hãy xem xét chương trình dưới đây thể hiện các hàm thư viện chuỗi:
#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;
}
Đầu ra:
Strings are not equal Concatenated string:Hello World! Length of first string:12 Length of second string:7 Copied string is:Hello World!
Các chức năng thư viện quan trọng khác là:
- strncmp(str1, str2, n): 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 và lớn 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ỏ tới 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ự.
- strrcr(str1, c): nó tìm kiếm ngược lại str1 và trả về một con trỏ tới 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ỏ tới 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 chuỗi thành chữ thường
- strupr() : chuyển 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 một 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) Biểu thị ASCII là float, nó chuyển đổi str thành giá trị double tương đương. Trả về 0.0 nếu ký tự đầu tiên không phải là số hoặc không gặp số nào.
- long int atol(str) Viết tắt của ASCII thành int dài, 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 đây minh họa hàm 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;}
Đầu ra:
Enter a number: 221348 you enter 221348
- Khai báo con trỏ chuỗi chẳng hạn như char *string = “ngôn ngữ” là một hằng số và không thể sửa đổi.
Tổng kết
- 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.
- Ký tự như 'd' không phải là một chuỗi và được biểu thị bằng dấu ngoặc đơn.
- 'C' cung cấp các hàm thư viện tiêu chuẩn để thao tác với các chuỗi trong một chương trình. Trình thao tác chuỗi được lưu trữ trong tập tin 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 chương trình.
- Có các hàm chuỗi đầu vào và đầu ra khác nhau, mỗi hàm đều có các tính năng riêng.
- Đừng quên bao gồm thư viện chuỗi để làm việc 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 các chuỗi trong C.
