C chuỗi: Hướng dẫn cho người mới bắt đầu
Xin chào các bạn future programmers! Hôm nay, chúng ta sẽ bắt đầu một hành trình thú vị vào thế giới của chuỗi trong C. Đừng lo lắng nếu bạn hoàn toàn mới với lập trình - tôi sẽ là hướng dẫn viên thân thiện của bạn, và chúng ta sẽ cùng nhau bước từng bước. Cuối cùng của hướng dẫn này, bạn sẽ có thể làm việc với C như một chuyên gia!
什么是 C 语言中的字符串?
Hãy bắt đầu từ cơ bản. Trong C, một chuỗi thực chất là một序列 các ký tự. Hãy tưởng tượng nó như một chuỗi hạt, mỗi hạt là một ký tự. Các ký tự này được lưu trữ trong các vị trí nhớ liên tục, kết thúc bằng một ký tự đặc biệt gọi là ký tự null ('\0').
Đây là một điều thú vị: Trong C, không có kiểu dữ liệu riêng cho chuỗi. Thay vào đó, chúng ta sử dụng một mảng các ký tự để đại diện cho một chuỗi. Nó giống như sử dụng một hàng thùng để lưu trữ một loạt thư!
Tạo một chuỗi trong C
Bây giờ, hãy thử tay nghề và tạo chuỗi đầu tiên của chúng ta trong C. Có một vài cách để làm điều này, nhưng chúng ta sẽ bắt đầu với phương pháp đơn giản nhất:
char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
Trong ví dụ này, chúng ta đã tạo một chuỗi có tên là greeting
chứa từ "Hello". Hãy phân tích nó:
-
char
là kiểu dữ liệu cho các ký tự. -
greeting
là tên của chuỗi của chúng ta. -
[6]
chỉ định kích thước của mảng. Chúng ta cần 6 không gian: 5 cho "Hello" và 1 cho ký tự null. - Các ký tự được bao quanh bởi dấu nháy đơn và tách biệt bằng dấu phẩy.
- Đừng quên ký tự null
'\0'
ở cuối!
Khởi tạo chuỗi mà không chỉ định kích thước
C rất thông minh và có thể tự mình xác định kích thước của chuỗi. Hãy xem thử:
char greeting[] = "Hello";
Thật tuyệt vời phải không? C tự động thêm ký tự null và tính toán kích thước. Nó giống như phép thuật, nhưng thực ra chỉ là C đang hoạt động hiệu quả!
Lặp qua một chuỗi
Bây giờ chúng ta đã có một chuỗi, hãy học cách lặp qua nó. Điều này rất hữu ích khi bạn muốn xử lý từng ký tự một:
#include <stdio.h>
int main() {
char greeting[] = "Hello";
int i = 0;
while (greeting[i] != '\0') {
printf("%c", greeting[i]);
i++;
}
return 0;
}
Mã này in từng ký tự của "Hello" một. Vòng lặp tiếp tục cho đến khi nó gặp ký tự null, dấu hiệu kết thúc của chuỗi.
In chuỗi (Sử dụng định dạng %s)
Lặp qua một chuỗi ký tự bằng ký tự là vui, nhưng có một cách dễ dàng hơn để in chuỗi:
#include <stdio.h>
int main() {
char greeting[] = "Hello, World!";
printf("%s", greeting);
return 0;
}
Định dạng %s
cho biết printf
sẽ mong đợi một chuỗi. Nó giống như cảnh báo printf
: "Hey, một chuỗi đang đến!"
Xây dựng chuỗi bằng cách sử dụng dấu kép
Nhớ lại ví dụ đầu tiên của chúng ta khi chúng ta tạo một chuỗi ký tự bằng ký tự? Well, có một cách rút gọn hơn:
char greeting[] = "Hello, World!";
Điều này làm cùng điều như ví dụ trước, nhưng ngắn gọn hơn nhiều. C tự động thêm ký tự null cho chúng ta. Nó giống như đặt hàng một chuỗi đã được căng sẵn thay vì tự căng các hạt!
Nhập chuỗi bằng cách sử dụng scanf()
Bây giờ, hãy làm cho chương trình của chúng ta tương tác hơn bằng cách lấy đầu vào từ người dùng:
#include <stdio.h>
int main() {
char name[50];
printf("Enter your name: ");
scanf("%s", name);
printf("Hello, %s!\n", name);
return 0;
}
Ở đây, chúng ta sử dụng scanf()
để đọc một chuỗi từ người dùng. Nhưng hãy cẩn thận! scanf()
ngừng đọc khi gặp dấu trắng đầu tiên. Vì vậy, nếu bạn nhập "John Doe", chỉ có "John" sẽ được lưu trữ trong name
.
Nhập chuỗi với dấu trắng
Để đọc một chuỗi có dấu trắng, chúng ta có thể sử dụng định dạng sau với scanf()
:
#include <stdio.h>
int main() {
char fullName[100];
printf("Enter your full name: ");
scanf("%[^\n]s", fullName);
printf("Hello, %s!\n", fullName);
return 0;
}
Định dạng %[^\n]s
cho biết scanf()
sẽ đọc cho đến khi gặp ký tự mới dòng. Điều này cho phép chúng ta đọc tên đầy đủ hoặc câu với khoảng trống.
Nhập chuỗi bằng cách sử dụng các hàm gets() và fgets()
Trong khi gets()
dễ sử dụng, nó được coi là không an toàn vì nó không thực hiện bất kỳ kiểm tra giới hạn nào. Thay vào đó, hãy sử dụng hàm an toàn hơn fgets()
:
#include <stdio.h>
int main() {
char sentence[100];
printf("Enter a sentence: ");
fgets(sentence, sizeof(sentence), stdin);
printf("You entered: %s", sentence);
return 0;
}
fgets()
an toàn hơn vì nó cho phép bạn chỉ định số lượng ký tự tối đa để đọc, giúp ngăn chặn sự tràn bộ nhớ.
In chuỗi bằng cách sử dụng các hàm puts() và fputs()
Cuối cùng, hãy xem xét một số cách thay thế để in chuỗi:
#include <stdio.h>
int main() {
char greeting[] = "Hello, World!";
puts(greeting); // puts() tự động thêm một dòng mới
fputs(greeting, stdout); // fputs() không thêm một dòng mới
return 0;
}
puts()
đơn giản và tự động thêm một dòng mới, trong khi fputs()
cho bạn nhiều quyền kiểm soát hơn đối với đầu ra.
Dưới đây là bảng tóm tắt các hàm chuỗi chúng ta đã xem xét:
Hàm | Mục đích | Ví dụ |
---|---|---|
scanf() | Đọc đầu vào định dạng | scanf("%s", str); |
gets() | Đọc một dòng (không an toàn, tránh sử dụng) | gets(str); |
fgets() | Đọc một dòng an toàn | fgets(str, size, stdin); |
printf() | In đầu ra định dạng | printf("%s", str); |
puts() | In một chuỗi với dòng mới | puts(str); |
fputs() | In một chuỗi mà không có dòng mới | fputs(str, stdout); |
Và thế là xong! Bạn đã bước đầu vào thế giới của chuỗi trong C. Nhớ rằng, thực hành làm cho hoàn hảo, vì vậy đừng ngần ngại thử nghiệm với các khái niệm này. Chúc mừng mã hóa, và hy vọng rằng các chuỗi của bạn luôn được null-terminated!
Credits: Image by storyset