Hướng dẫn lập trình C trên Linux Phần 9: Chuỗi

theanh

Administrator
Nhân viên
Trong loạt bài hướng dẫn lập trình C đang diễn ra này, chúng ta đã đề cập đến khái niệm về mảng ký tự. Có liên quan chặt chẽ đến mảng ký tự là khái niệm về chuỗi, mà chúng ta sẽ thảo luận ở đây.

Chuỗi khác với mảng ký tự ở một điểm chính - nó được kết thúc bằng ký tự Null '\0'. Không có ký tự kết thúc nào như vậy trong mảng ký tự. Đoạn mã sau đây cho thấy một số cách mà một chuỗi có thể được định nghĩa:
Mã:
#include 

int main()
{
 char str[] = "string";
 char str1[] = {'s','t','r','i','n','g','\0'};
 char str2[10] = "string";
 char str3[10] = {'s','t','r','i','n','g','\0'};
 char *str4 = "string";

 printf("\n str=%s, str1=%s, str2=%s, str3=%s, and str4=%s", str, str1, str2, str3, str4);

 return 0;
}
Vì vậy, một nhóm ký tự trong dấu ngoặc kép là một chuỗi (ký tự Null kết thúc được ngầm định ở đó) và một chuỗi ký tự kết thúc rõ ràng bằng ký tự \0 cũng là một chuỗi.

Đầu ra của chương trình này là:
Mã:
 str=string, str1=string, str2=string, str3=string, and str4=string
Hãy nhớ rằng bạn không thể in các mảng ký tự không phải chuỗi theo cách này, vì không có Null kết thúc charcter ở đó để biểu thị kết thúc mảng. Sau đây là một đoạn mã cố gắng thực hiện điều này:
Mã:
#include 

int main()
{
 char str[] = {'e','n','d'};
 char c ='t';

 printf("\n str=%s", str);

 return 0;
}
Nhưng cuối cùng lại in ra các giá trị rác ở cuối:
Mã:
str=end??
Tiếp tục, giống như chỉ định định dạng %s trong 'Printf' yêu cầu trình biên dịch xử lý các biến đầu vào dưới dạng chuỗi, bạn cũng có thể sử dụng %s trong hàm 'scanf' để chấp nhận chuỗi làm đầu vào từ người dùng. Đây là một ví dụ:
Mã:
#include 

int main()
{
 char str[30];
 
 printf("\n Nhập một chuỗi có độ dài nhỏ hơn 30 ký tự: ");
 scanf("%s",str);

 printf("\n str=%s", str);

 return 0;
}
Cần đề cập rằng một chuỗi gồm không hoặc nhiều ký tự được bao quanh bởi dấu ngoặc kép được gọi là hằng chuỗi hoặc ký tự chuỗi. Điều này có nghĩa là cả "howtoforge" và "" đều là hằng chuỗi hoặc ký tự chuỗi.

Bạn có thể tìm độ dài của một chuỗi bằng cách sử dụng hàm strlen() chuẩn. Đây là một ví dụ:
Mã:
#include 

int main()
{
 char str[] = "howtoforge";

 printf("\n Độ dài của chuỗi 'howtoforge' là: %d", strlen(str));

 return 0;
}
Đầu ra do chương trình này tạo ra là 10, chính xác là số ký tự trong 'howtoforge' và do đó cũng là độ dài của chuỗi.

Tiếp theo, cần lưu ý rằng một ký tự trong dấu ngoặc đơn (như 'd') và một ký tự trong dấu ngoặc kép (như "d") là khác nhau. Trong khi hằng số đầu tiên là hằng số ký tự (có thể được sử dụng để tạo ra giá trị số của ký tự trong bộ ký tự của máy), thì hằng số thứ hai là một chuỗi (có nghĩa là có ký tự kết thúc \0 trong đó).

Cuối cùng, chúng ta hãy nhanh chóng xem xét cách các chuỗi có thể được truyền làm đối số cho các hàm.
Mã:
#include 

void change_value(char s[])
{
 s[0] = 'H';
 s[5] = 'F';
 
 printf("%s", s);
 
}

int main()
{
 char str[] = "howtoforge";

 change_value(str);

 return 0;
}
Vì vậy, trong chương trình trên, đó là tên của mảng 'str' được truyền như một đối số vì nó tham chiếu đến địa chỉ cơ sở của mảng. Khai báo cho hàm 'change_value' là hàm mong đợi một mảng làm đầu vào. Sau đây là đầu ra của chương trình này:
Mã:
HowtoForge
Vì vậy, trong hướng dẫn này, chúng ta đã thảo luận về những điều cơ bản của chuỗi, bao gồm cách chúng được định nghĩa và cách chúng có thể được sử dụng. Chúng ta sẽ tìm hiểu thêm về chuỗi trong các hướng dẫn sắp tới nhưng bài viết này sẽ đủ để giúp bạn bắt đầu. Hãy cho chúng tôi biết trong phần bình luận bên dưới nếu bạn có bất kỳ thắc mắc hoặc nghi ngờ nào liên quan đến chuỗi.
 
Back
Bên trên