- Bài 1: Tổng quan ngôn ngữ lập trình C
- Bài 2: Hướng dẫn cài đặt C
- Bài 3: Biến trong C
- Bài 4: Các kiểu dữ liệu trong C
- Bài 5: Toán tử trong C
- Bài 6: Định danh trong C
- Bài 7: Câu lênh điều kiện if, if-else và switch trong C
- Bài 8: Vòng lặp trong C - Câu lệnh for, while, do...while
- Bài 9: Câu lệnh break, continue goto và hàm exit() trong C
- Bài 10: Mảng trong C
- Bài 11: Con trỏ trong C
- Bài 12: Đọc ghi file trong C
- Bài 13: Chuỗi trong C
- Bài 14: Struct trong C
Bài 13: Chuỗi trong C - Học lập trình C cơ bản
Đăng bởi: Admin | Lượt xem: 8802 | Chuyên mục: C/C++
Trong bài này chúng ta sẽ làm rõ sự khác nhau giữa mảng và chuỗi, cách khởi tạo và khai báo chuỗi. Cách để nhập chuỗi có khoảng trắng và một số lưu ý khi làm việc với chuỗi.
1. Chuỗi là gì?
Trong ngôn ngữ lập trình C, chuỗi là một tập hợp các ký tự (char) được lưu trữ trên các ô nhớ liên tiếp và luôn luôn có 1 ký tự null là \0 báo hiệu kết thúc chuỗi.
int c[] = "c string";
Ví dụ, khi khai báo và khởi tạo chuỗi theo cách trên, trình biên dịch sẽ tự thêm 1 ký tự null \0 vào cuối. Như vậy, nếu bạn muốn khai báo chuỗi để lưu n ký tự, bạn cần mảng ký tự có kích thước tối đa ít nhất là n+1.
2. Khởi tạo
Bạn có thể khởi tạo giá trị cho chuỗi theo 1 trong các cách dưới đây:
char c[] = "abcd";
char c[50] = "abcd";
char c[] = {'a', 'b', 'c', 'd', '\0'};
char c[5] = {'a', 'b', 'c', 'd', '\0'};
Nhưng không được làm như sau:
char c[5] = "abcde";
Bởi vì chuỗi của bạn có 5 ký tự cộng thêm 1 ký tự \0 là 6, sẽ bị vượt quá kích thước tối đa.
3. Cách nhập chuỗi
Bạn có thể sử dụng hàm scanf() để nhập chuỗi không có chứa dấu trắng (dấu cách, dấu tab, dấu \n) và hàm printf() để xuất chuỗi.
#include
int main()
{
char name[20];
printf("Enter name: ");
scanf("%s", name);
printf("Your name is %s.", name);
return 0;
}
Kết quả thu được:
Enter name: Cao Van Bien
Your name is Bien.
Nếu bạn để ý thì hàm scanf() dùng dấu trắng để nhập nhiều input đồng thời. Do đó bạn chỉ nên dùng hàm scanf() khi nhập chuỗi viết liền.
4. Cách nhập chuỗi có khoảng trắng
Để nhập chuỗi bao gồm cả dấu trắng, bạn nên sử dụng hàm fgets() để nhập. Tương ứng, bạn cũng có thể in ra chuỗi bằng hàm puts().
#include
int main()
{
char name[30];
printf("Enter name: ");
fgets(name, sizeof(name), stdin); // read string
// gets(name); // không nên dùng
printf("Name: ");
puts(name); // display string
return 0;
}
Kết quả:
Enter name: Cao Van Bien
Name: Cao Van Bien
Lưu ý:
- Bạn hoàn toàn có thể dùng hàm printf() để xuất chuỗi có khoảng trắng. Sự khác biệt là hàm puts() sẽ in thêm 1 dấu \n ở cuối chuỗi.
- Hàm gets() cũng có thể dùng để nhập chuỗi theo cách ở dòng 7 (đã comment lại) trong đoạn code trên. Tuy nhiên hàm này không còn được khuyến khích được sử dụng vì nó không chỉ định kích thước tối đa của chuỗi => Có thể gây ra tràn bộ nhớ làm lỗi chương trình.
5. Chương trình không cho nhập chuỗi?
Nếu bạn làm việc với chuỗi mà xảy ra hiện tưởng chương trình bỏ qua bước nhập chuỗi của bạn thì đây là vấn đề. Hiện tượng này xảy ra do trước khi nhập chuỗi bạn có nhập vào 1 biến số nào đó; Điều đó khiến bộ nhớ đệm còn lưu lại ký tự \n.
Để khắc phục vấn đề này, bạn cần dùng hàm fflush(stdin) để xóa bộ nhớ đệm khi dùng gets() và dùng getchar() ở giữa các lần sử dụng scanf() kết hợp với fgets() nhé.
#include
int main(){
int age;
char name[30];
printf("\nNhap tuoi: "); scanf("%d", &age);
getchar(); // đọc ký tự '\n'
printf("\nNhap ten: "); fgets(name, sizeof name, stdin);
printf("%s - %d", name, age);
}
// Nếu dùng gets()
#include
int main(){
int age;
char name[30];
printf("\nNhap tuoi: "); scanf("%d", &age);
fflush(stdin); // đọc ký tự '\n'
printf("\nNhap ten: "); gets(name);
printf("%s - %d", name, age);
}
Kết quả thu được:
Nhap tuoi: 23
Nhap ten: Cao Van Bien
Cao Van Bien - 23
Như vậy, thông qua bài học này, mình đã giới thiệu đến các bạn những thao tác cơ bản với chuỗi trong C. Cảm ơn các bạn đã đọc.
Theo dõi VnCoder trên Facebook, để cập nhật những bài viết, tin tức và khoá học mới nhất!
- Bài 1: Tổng quan ngôn ngữ lập trình C
- Bài 2: Hướng dẫn cài đặt C
- Bài 3: Biến trong C
- Bài 4: Các kiểu dữ liệu trong C
- Bài 5: Toán tử trong C
- Bài 6: Định danh trong C
- Bài 7: Câu lênh điều kiện if, if-else và switch trong C
- Bài 8: Vòng lặp trong C - Câu lệnh for, while, do...while
- Bài 9: Câu lệnh break, continue goto và hàm exit() trong C
- Bài 10: Mảng trong C
- Bài 11: Con trỏ trong C
- Bài 12: Đọc ghi file trong C
- Bài 13: Chuỗi trong C
- Bài 14: Struct trong C