
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 nư ệ ẩ file 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 headerậhai 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 iủ ỗ c 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 ngạ ki 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 ngạki uể in ch ữhoa. Vi cệ
chuy n đ i v ể ổ ề d ngạki 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[]);
254 Elementary Programming with C

clrscr();
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