Giáo trình Lập trình cơ bản C - Bài 18: Chuỗi (Tiếp theo)
Bài 18
Chuỗi
Mục tiêu:
Kết thúc bài học này, bạn có thể:
➢ Sử dụng các hàm về chuỗi
➢ Truyền mảng vào hàm
➢ Truyền chuỗi vào hàm.
Các bước trong bài này được giải thích chi tiết, đầy đủ. Mục đích là nắm được những nội
dung trong bài lý thuyết và sử dụng thành thạo được công cụ. Hãy làm theo các bước dưới
đây một cách cẩn thận.
Các bước được cho trong bài này được giải thích cặn kẽ, dễ hiểu và đã được tư duy cẩn thận từ đầu
đến cuối. Bài đã được viết để đáp ứng được mục tiêu học và để có thể hiểu hoàn toàn về công cụ. Xin
hãy thực hiện theo các bước một cách cẩn thận.
Phần I – Trong thời gian 1 giờ 30 phút đầu:
18.1
Các hàm về chuỗi
Các hàm xử lí chuỗi trong C nằm trong trong thư viện chuẩnfile string.h. Do đó bất kì
chương trình nào có sử dụng đến các hàm xử lí chuỗi phải đưa file thư viện này vào
bằng lệnh include.
Các hàm về chuỗi trong C được tìm thấy trong tập tin header chuẩn string.h. Tập tin này phải
được bao gồm (include) trong mỗi chương trình sử dụng các hàm về chuỗi.
18.1.1 Sắp xếp chuỗi sử dụng các hàm trong thư viện
Lưu chuỗi sử dụng các hàm trong thư viện
Các hàm về chuỗi được dùng để thao tác trên các mảng ký tự. Chẳng hạn như, chiều dài của
một chuỗi có thể được xác định bằng hàm strlen(). Chúng ta hãy viết một chương trình C để
sắp xếp 5 chuỗi theo độ dài giảm dần. Các bước thực hiện được liệt kê như sau:
1. Như chúng ta đã học trong bài lý thuyết, trong C, để sử dụng các hàm về chuỗi từ thư viện,
chúng ta cần phải bao gồmđưa vào hai tập tin headerhai thư viện chuẩn: stdio.h, string.h.
Câu lệnh sẽ là:
#include <stdio.h>
#include <string.h>
2. Khai báo một mảng ký tự để lưu 5 chuỗi. Câu lệnh sẽ là:
char str_arr[5][20];
3. Nhập vào 5 chuỗi trong vòng lặp for. Câu lệnh sẽ là:
for(i = 0; i < 5; i++)
{
printf("\nEnter string %d: ", i + 1);
scanf("%s", str_arr[i]);
Chuỗi
251
}
4. So sánh độ chiều dài của mỗi chuỗi với các chuỗi khác, nếu chiều dài của chuỗi này nhỏ
hơn chiều dài của một chuỗi đứng ở vị trí phía sau nó trong mảng, ta sẽ thực hiện đổi chỗ 2
chuỗi đó cho nhau. Đổi chỗ nếu chiều dài của chuỗicủa nó nhỏ hơn chuỗi kia. Câu lệnh sẽ
là:
for(i = 0; i < 4; i++)
for(j = i + 1; j < 5; j++)
{
if(strlen(str_arr[i]) < strlen(str_arr[j]))
{
strcpy(str, str_arr[i]);
strcpy(str_arr[i], str_arr[j]);
strcpy(str_arr[j], str);
}
}
Chuỗi str được sử dụng trong thao tác hoán đổi hai chuỗi.
Một mảng str được sử dụng để giúp đỡ cho thao tác đổi chỗ.
5. Hiển thị các chuỗi theo thứ tự đã sắp xếp. Câu lệnh sẽ là:
printf("\nThe strings in descending order of length are:");
for(i = 0; i < 5; i++)
printf("\n%s", str_arr[i]);
Chúng ta hãy nhìn vàoxem chương trình hoàn chỉnh.
1. Mở chương trình soạn thảo mà bạn dùng để gõ chương trình C.
2. Tạo một tập tin mới.
3. Gõ vào các dòng lệnh sau đây:
#include <stdio.h>
#include <string.h>
void main()
{
int i, j;
char str_arr[5][20], str[20];
clrscr();
for(i = 0; i < 5; i++)
{
printf("\nEnter string %d: ", i + 1);
scanf("%s", str_arr[i]);
}
for(i = 0; i < 4; i++)
for(j = i + 1; j < 5; j++)
{
if(strlen(str_arr[i]) < strlen(str_arr[j]))
{
strcpy(str, str_arr[i]);
252
Elementary Programming with C
strcpy(str_arr[i], str_arr[j]);
strcpy(str_arr[j], str);
}
}
printf("\nThe strings in descending order of length are:");
for(i = 0; i < 5; i++)
printf("\n%s", str_arr[i]);
getch();
}
Để xem kết quả, thực hiện các bước sau đây:
4. Lưu tập tin với tên stringI.C.
5. Biên dịch tập tin, stringI.C.
6. Thực thi chương trình, stringI.C.
7. Trở về chương trình soạn thảo.
Kết quả của chương trình trên được minh họa như sau:
Một ví dụ thực thi chương trình trên như sau:
Enter string 1: This
Enter string 2: sentence
Enter string 3: is
Enter string 4: not
Enter string 5: sorted
The strings in descending order of length are:
sentence
sorted
This
not
is
18.1.2 Sử dụng hàm để chuyển một mảng ký tự về dạngkiểu in chữ hoa
Các chuỗi có thể được truyền vào hàm để thao tác. Khi chuỗi, hay mảng các ký tự, được
truyền vào hàm, thực ra là ta truyền địa chỉ của nó . Để minh họa điều này, chúng ta hãy viết
một chương trình C để chuyển một tập hợp các chuỗi về dạngkiểu in chữ hoa. Việc chuyển đổi
về dạngkiểu in chữ hoa sẽ được thực hiện bằng một hàm.
Các bước được liệt kê như sau:
1. Bao gồmĐưa vào các tập tin header thư viện cần thiết. Câu lệnh sẽ là:
#include <stdio.h>
#include <string.h>
2. Khai báo một mảng để lưu trữ 5 chuỗi. Câu lệnh sẽ là:
char names[5][20];
3. Khai báo một hàm nhận vào một chuỗi như là một đối số. Câu lệnh sẽ là:
Chuỗi
253
void uppername(char name_arr[]);
4. Nhập 5 chuỗi đưa vào mảng. Câu lệnh sẽ là:
for(i = 0; i < 5; i++)
{
printf("\nEnter string %d: ", i + 1);
scanf("%s", names[i]);
}
5. Truyền mỗi chuỗi vào hàm để chuyển thành in hoa. Sau khi chuyển đổi, hiển thị
chuỗi đã thay đổi. Câu lệnh sẽ là:
for(i = 0; i < 5; i++)
{
uppername(names[i]);
printf("\nNew string %d: %s", i + 1, names[i]);
}
6. Định nghĩa hàm. Câu lệnh sẽ là:
void uppername(char name_arr[])
{
int x;
for(x = 0; name_arr[x] != '\0'; x++)
{
if(name_arr[x] >= 97 && name_arr[x] <= 122)
name_arr[x] = name_arr[x] - 32;
}
}
Câu lệnh điều kiện bên trong vòng lặp kiểm tra giá trị ASCII của từng kí tự trong chuỗi. Nếu
kí tự ở dạng chữ thường, nó sẽ được chuyển về dạng chữ hoa. Lưu ý rằng giá trị ASCII của
‘A’ là 65 và ‘a’ là 97.
Điều kiện kiểm tra giá trị ASCII của mỗi ký tự trong chuỗi. Nếu ký tự đang là chữ thường,
nó sẽ được chuyển đổi về dạng in hoa. Lưu ý rằng giá trị ASCII của ‘A’ là 65 và ‘a’ là 97.
Chúng ta hãy nhìn xem vào chương trình hoàn chỉnh.
1. Tạo một tập tin mới.
2. Gõ vào các dòng lệnh sau đây:
#include <stdio.h>
#include <string.h>
void main()
{
int i;
char names[5][20];
void uppername(char name_arr[]);
clrscr();
254
Elementary Programming with C
<