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 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 nắm được những nội  
dung trong bài lý thuyết 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 đã đượ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 để 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ử 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ử 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 tự. Chẳng hạn như, chiều dài của  
một chuỗi 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 như sau:  
1. Như chúng ta đã học trong bài 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 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 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 bạn dùng để 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 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 tự về dạngkiểu in chữ hoa  
Các chuỗi 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 . Để 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 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ư 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 tự trong chuỗi. Nếu  
tự ở dạng chữ thường, 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 tự trong chuỗi. Nếu tự đang chữ thường,  
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  
for(i = 0; i < 5; i++)  
{
printf("\nEnter string %d: ", i + 1);  
scanf("%s", names[i]);  
}
for(i = 0; i < 5; i++)  
{
uppername(names[i]);  
printf("\nNew string %d: %s", i + 1, names[i]);  
}
getch();  
}
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;  
}
}
Để xem kết quả, thực hiện các bước sau đây:  
3. Lưu tập tin với tên stringII.C.  
4. Biên dịch tập tin stringII.C.  
5. Thực thi chương trình stringII.C.  
6. 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ẫu kết quả của chương trình như sau:  
Enter string 1: Sharon  
Enter string 2: Christina  
Enter string 3: Joanne  
Enter string 4: Joel  
Enter string 5: Joshua  
New string 1: SHARON  
New string 2: CHRISTINA  
New string 3: JOANNE  
New string 4: JOEL  
New string 5: JOSHUA  
Chuỗi  
255  
Phần II – Trong thời gian 30 phút kế tiếp:  
1. Viết một chương trình C để hiển thị số lần xuất hiện của một tự nào đó trong một chuỗi. Đặt  
Dùng một vòng lặp để thực hiện thao tác này 5 lần.  
Để làm điều này,  
a. Khai báo một biến tự một mảng tự.  
b. Khai báo một hàm để nhận vào một mảng tự một biến tự, trả về một giá trị  
nguyên.  
c. Đặt Dùng một vòng lặp để nhập vào một chuỗi một tự 5 lần.  
d. Nhận vào một chuỗi một tự.  
e. Truyền chuỗi và ký tự vào hàm và nhận giá trị trả về bằng một biến nguyên.  
f. In giá trị trả về.  
g. Viết code cho hàm trên. Hàm trên thực hiện Sso sánh từng tự trong chuỗi với tụ cần  
tìm. Tăng biến đếm lên một mỗi khi tìm thấy tự đó trong chuỗi. Cuối cùng, trả về giá trị  
của biến đếm cho hàm main().  
g. Viết định nghĩa hàm. So sánh mỗi tự trong chuỗi với tự đã đưa vào. Tăng một biến  
nguyên mỗi khi ký tự đã đưa vào xuất hiện trong chuỗi. Cuối cùng, trả về biến nguyên cho hàm  
main().  
256  
Elementary Programming with C  
Bài tập tự làm  
1. Viết một chương trình C để nhập vào 5 tên và một chức danh. Xen Chèn chức danh đó vào phần  
vào đầu mỗi tên trong mảng. Hiển thị các tên đã sửa đổi.  
2. Viết một chương trình C nhập vào nhiệt độ trung bình hằng năm của 5 năm qua, cho 5 thành phố.  
Hiển thị nhiệt độ lớn nhất nhỏ nhất của mỗi thành phố. Sử dụng hàm để xác định các nhiệt độ  
lớn nhất nhỏ nhất.  
Chuỗi  
257  
doc 7 trang Thùy Anh 26/04/2022 10440
Bạn đang xem tài liệu "Giáo trình Lập trình cơ bản C - Bài 18: Chuỗi (Tiếp theo)", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • docgiao_trinh_lap_trinh_co_ban_c_bai_18_chuoi_tiep_theo.doc