Chuỗi Là Gì? Hàm Nhập Chuỗi Trong C Nhập Chuỗi Trong C

Trang chủ | KIẾN THỨC LẬP TRÌNH | C/C++ | Kiến thức về chuỗi (string) trong C và cách nhập xuất chuỗi trong C.

Bạn đang xem: Chuỗi Là Gì? Hàm Nhập Chuỗi Trong C Nhập Chuỗi Trong C

Trong phần này, bạn sẽ được tìm hiểu các kiến thức liên quan đến string hay chuỗi trong C: cách khai báo, khởi tạo và sử dụng chúng cho các hoạt động vào/ra thông qua các ví dụ.

Trong lập trình C, chuỗi là một chuỗi các ký tự được kết thúc bằng ký tự rỗng \0. Ví dụ:

char c<> = “c string”;

Khi trình biên dịch gặp một chuỗi có các ký tự được đặt trong dấu <> thì theo mặc định, nó sẽ thêm một ký tự rỗng \0 vào cuối.

Dưới đây là cách khai báo chuỗi ký tự trong C:

char s<5>;

Tôi đã khai báo một chuỗi gồm 5 ký tự.

Bạn có thể khởi tạo chuỗi theo những cách sau đây:

char c<> = “abcd”;

char c<50> = “abcd”;

char c<> = {‘a’, ‘b’, ‘c’, ‘d’, ‘\0’};

char c<5> = {‘a’, ‘b’, ‘c’, ‘d’, ‘\0’};

Hãy xem qua 1 ví dụ khác:

char c<5> = “abcde”;

Trong ví dụ này, tôi đã thử gán 6 ký tự (ký tự cuối cùng là ‘\0’) cho mảng char – mảng này chỉ có 5 ký tự. Tuy nhiên, mọi thứ đều diễn ra khá tệ và bạn không nên làm những việc tương tự như thế.

Mảng ký tự trong C và chuỗi ký tự là 2 phần tử đồng hạng hai trong lập trình C. Chúng không hỗ trợ toán tử gán khi nó được khai báo. Ví dụ,

char c<100>;

c = “C programming”; // Error! array type is not assignable.

Lưu ý, bạn có thể sử dụng hàm strcpy() để sao chép chuỗi trên.

Bạn có thể sử dụng hàm scanf() để đọc một chuỗi.

Hàm scanf() đọc một chuỗi ký tự cho đến khi nó gặp khoảng trắng (dấu cách, dòng mới, tab,…)

Ví dụ 1: dùng hàm scanf() để đọc một chuỗi

#include

int main()

{

char name<20>;

printf(“Enter name: “);

scanf(“%s”, name);

printf(“Your name is %s.”, name);

return 0;

}Đầu raEnter name: Dennis RitchieYour name is Dennis.Mặc dù tôi đã nhập Dennis Ritchie vào lập trình trên nhưng chỉ có “Dennis” là được lưu trữ trong chuỗi name. Bởi vì có một khoảng trống phía sau Dennis.

Bạn có thể sử dụng hàm fgets() để đọc 1 dòng trong chuỗi. Và sử dụng hàm puts() để hiển thị chuỗi.

Ví dụ 2: Hàm fgets() và put()

#include

int main()

{

char name<30>;

printf(“Enter name: “);

fgets(name, sizeof(name), stdin); // read string

printf(“Name: “);

puts(name); // display string

return 0;

}

Đầu raEnter name: Tom HanksName: Tom Hanks

Dưới đây, tôi sử dụng hàm fgets() để đọc một chuỗi do người dùng nhập vào.fgets(name, sizeof(name), stdlin); // read string

Kết quả sizeof(name) là 30. Do đó, tôi có thể lấy tối đa 30 ký tự làm đầu vào và cũng chính là kích thước của chuỗi name.

Để in chuỗi, tôi sử dụng hàm puts(name);.

Lưu ý: Hàm gets() cũng có chức năng lấy đầu vào do người dùng nhập. Tuy nhiên, nó không phải là hàm tiêu chuẩn trong lập trình C.

Bởi vì hàm gets() cho phép bạn nhập chuỗi trong C độ dài ký tự tùy ý. Điều này sẽ dẫn đến tình trạng tràn bộ nhớ đệm.

String trong C có thể được truyền vào hàm theo cách tương tự như mảng. Xem chi tiết cách truyền mảng vào hàm tại đây.

Xem thêm: Tất Tần Tật Những Câu Slogan Hay Về Ẩm Thực, Câu Nói Hay Về Ăn Uống Cực Chất

Ví dụ 3: Truyền một chuỗi vào một hàm

#include

void displayString(char str<>);

int main()

{

char str<50>;

printf(“Enter string: “);

fgets(str, sizeof(str), stdin);

displayString(str); // Passing string to a function.

return 0;

}

void displayString(char str<>)

{

printf(“String Output: “);

puts(str);

}

Tương tự như mảng, tên chuỗi cũng được phân rã thành biến pointer. Do đó, bạn có thể sử dụng biến pointer để thực hiện thao tác trên các phần tử của chuỗi.

Tôi nghĩ là bạn nên xem lại phần mảng và biến pointer trong lập trình C trước khi xem ví dụ dưới đây.

Ví dụ 4: Chuỗi và biến pointer

#include

int main(void) {

char name<> = “Harry Potter”;

printf(“%c”, *name); // Output: H

printf(“%c”, *(name+1)); // Output: a

printf(“%c”, *(name+7)); // Output: o

char *namePtr;

namePtr = name;

printf(“%c”, *namePtr); // Output: H

printf(“%c”, *(namePtr+1)); // Output: a

printf(“%c”, *(namePtr+7)); // Output: o

}

Các hàm xử lý chuỗi thường được sử dụng

strlen() – tính độ dài của một chuỗistrcpy() – sao chép từ một chuỗi sang chuỗi khácstrcmp() – so sánh 2 chuỗistrcat() – nối 2 chuỗi

Trong phần này, bạn sẽ được học về cách thao tác trên chuỗi trong lập trình C bằng cách sử dụng các hàm tiêu chuẩn như gets(), puts, strlen(),…

Bên cạnh đó, bạn cũng sẽ học được cách lấy chuỗi do người dùng nhập vào và thực hiện các thao tác trên chuỗi.

Bạn phải thường xuyên thao tác trên các chuỗi, tùy thuộc vào vấn đề cần giải quyết.

Tuy nhiên, không phải tất cả các thao tác trên chuỗi đều được thực hiện một cách thủ công, bởi vì điều này khiến cho lập trình của bạn trở nên phức tạp và “cồng kềnh”.

Để giải quyết vấn đề này, lập trình C đã hỗ trợ một lượng lớn các hàm xử lý chuỗi trong thư viện tiêu chuẩn “string.h”.

Dưới đây là một số hàm xử lý chuỗi thường được sử dụng

HàmChức năng của hàmstrlen()tính độ dài của chuỗistrcpy()sao chép một chuỗi sang chuỗi khácstrcat()nối 2 chuỗistrcmp()so sánh 2 chuỗistrlwr()chuyển đổi chuỗi sang chữ thườngstrupr()chuyển đổi chuỗi sang chữ in hoa