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 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 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 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 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 i251
}
4. So sánh đ chiu 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 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 th đ c truy n vào hàm đ thao tác. Khi chu i ượ , hay m ng các t , đ c ượ
truy n vào hàm, th c ra 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 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 i253
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, 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 i255