Chuỗi ký tự trong C

From Wikiversity
Jump to: navigation, search

Phần này nằm trong chuỗi bài Ngôn ngữ C

Khái niệm[edit]

Chuỗi ký tự là một dãy gồm các ký tự hoặc một mảng các ký tự được kết thúc bằng ký tự '\0' (còn được gọi là ký tự NULL trong bảng mã Ascii).

Các hằng chuỗi ký tự được đặt trong cặp dấu nháy kép "".

Khai báo[edit]

Khai báo theo mảng[edit]

Cú pháp: char <Biến> [Chiều dài tối đa]

Ví dụ: Trong chương trình, ta có khai báo:

char Ten[12];

Trong khai báo này, bộ nhớ sẽ cung cấp 12-1 bytes để lưu trữ nội dung của chuỗi ký tự Ten; byte cuối cùng lưu trữ ký tự ‘\0’ để chấm dứt chuỗi.

Ghi chú:

  • Chiều dài tối đa không nên khai báo thừa để tránh lãng phí bộ nhớ, nhưng cũng không nên khai báo thiếu.

Khai báo theo con trỏ[edit]

Cú pháp: char *<Biến>

Ví dụ: Trong chương trình, ta có khai báo:

char *Ten;

Trong khai báo này, bộ nhớ sẽ dành 2 byte để lưu trữ địa chỉ của biến con trỏ Ten đang chỉ đến, chưa cung cấp nơi để lưu trữ dữ liệu. Muốn có chỗ để lưu trữ dữ liệu, ta phải gọi đến hàm malloc() hoặc calloc() có trong “alloc.h”, sau đó mới gán dữ liệu cho biến.

Vừa khai báo vừa gán giá trị[edit]

Ví dụ:

1 #include<stdio.h>
2 #include<conio.h>
3 int main()
4 {
5     char Chuoi[]="Mau nang hay la mau mat em" ;
6     printf("Vua khai bao vua gan tri : %s",Chuoi) ;
7     getch();
8     return 0; 
9 }

Ghi chú: Chuỗi được khai báo là một mảng các ký tự nên các thao tác trên mảng có thể áp dụng đối với chuỗi ký tự.

Các thao tác trên chuỗi ký tự[edit]

Nhập xuất chuỗi[edit]

Nhập chuỗi từ bàn phím[edit]

Để nhập một chuỗi ký tự từ bàn phím, ta sử dụng hàm gets()

Cú pháp: gets(<Biến chuỗi>)

Ví dụ:

char Ten[20];
gets(Ten);

Ta cũng có thể sử dụng hàm scanf() để nhập dữ liệu cho biến chuỗi, tuy nhiên lúc này ta chỉ có thể nhập được một chuỗi không có dấu khoảng trắng.

Ngoài ra, hàm cgets() (trong conio.h) cũng được sử dụng để nhập chuỗi.

Xuất chuỗi lên màn hình[edit]

Để xuất một chuỗi (biểu thức chuỗi) lên màn hình, ta sử dụng hàm puts().

Cú pháp: puts(<Biểu thức chuỗi>)

Ví dụ: Nhập vào một chuỗi và hiển thị trên màn hình chuỗi vừa nhập.

 1 #include<conio.h>
 2 #include<stdio.h>
 3 #include<string.h>
 4 int main()
 5 {
 6     char Ten[12];
 7     char queQuan[15];
 8     printf("Nhap Ten: ");fflush(stdin);gets(Ten);
 9     printf("Nhap Que Quan: ");fflush(stdin);gets(queQuan);
10     printf("Chuoi vua nhap: ");puts(Ten);puts(queQuan);
11     getch();
12     return 0;
13 }

Ngoài ra, ta có thể sử dụng hàm printf(), puts() (trong conio.h) để hiển thị chuỗi lên màn hình.

Một số hàm xử lý chuỗi (trong string.h)[edit]

Cộng chuỗi - Hàm strcat()[edit]

Cú pháp: char *strcat(char *des, const char *source)

Hàm này có tác dụng ghép chuỗi nguồn vào chuỗi đích.

Ví dụ: Nhập vào họ lót và tên của một người, sau đó in cả họ và tên của họ lên màn hình.

 1 #include<conio.h>
 2 #include<stdio.h>
 3 #include<string.h>
 4 int main()
 5 {
 6     char HoLot[30], Ten[12];
 7     printf("Nhap Ho Lot: ");gets(HoLot);
 8     printf("Nhap Ten: ");gets(Ten);
 9     strcat(HoLot,Ten); /* Ghep Ten vao HoLot*/
10     printf("Ho ten la: ");puts(HoLot);
11     getch();
12     return 0;
13 }

Xác định độ dài chuỗi - Hàm strlen()[edit]

Cú pháp: int strlen(const char* s)

Ví dụ: Sử dụng hàm strlen xác định độ dài một chuỗi nhập từ bàn phím.

 1 #include<conio.h>
 2 #include<stdio.h>
 3 #include<string.h>
 4 int main(){
 5     char Chuoi[255];
 6     int Dodai;
 7     printf("Nhap chuoi: ");gets(Chuoi);
 8     Dodai = strlen(Chuoi);
 9     printf("Chuoi vua nhap: ");puts(Chuoi);
10     printf("Co do dai %d",Dodai);
11     getch();
12     return 0;
13 }

Đổi một ký tự thường thành ký tự hoa - Hàm toupper()[edit]

Hàm toupper() (trong ctype.h) được dùng để chuyển đổi một ký tự thường thành ký tự hoa.

Cú pháp: char toupper(char c)

Đổi chuỗi chữ thường thành chuỗi chữ hoa, hàm strupr()[edit]

Hàm strupr() được dùng để chuyển đổi chuỗi chữ thường thành chuỗi chữ hoa, kết quả trả về của hàm là một con trỏ chỉ đến địa chỉ chuỗi được chuyển đổi.

Cú pháp: char* strupr(char *s)

Ví dụ: Viết chương trình nhập vào một chuỗi ký tự từ bàn phím. Sau đó sử dụng hàm strupr() để chuyển đổi chúng thành chuỗi chữ hoa.

 1 #include<conio.h>
 2 #include<stdio.h>
 3 #include<string.h>
 4 int main()
 5 {
 6     char Chuoi[255],*s;
 7     printf("Nhap chuoi: ");gets(Chuoi);
 8     s=strupr(Chuoi) ;
 9     printf(Chuoi chu hoa: );puts(s);
10     getch();
11     return 0;
12 }

Đổi chuỗi chữ hoa thành chuỗi chữ thường, hàm strlwr()[edit]

Muốn chuyển đổi chuỗi chữ hoa thành chuỗi toàn chữ thường, ta sử dụng hàm strlwr(), các tham số của hàm tương tự như hàm strupr()

Cú pháp: char *strlwr(char *s)

Sao chép chuỗi, hàm strcpy()[edit]

Hàm này được dùng để sao chép toàn bộ nội dung của chuỗi nguồn vào chuỗi đích.

Cú pháp: char* strcpy(char *Des, const char *Source)

Ví dụ: Viết chương trình cho phép chép toàn bộ chuỗi nguồn vào chuỗi đích.

 1 #include<conio.h>
 2 #include<stdio.h>
 3 #include<string.h>
 4 int main()
 5 {
 6     char Chuoi[255],s[255];
 7     printf("Nhap chuoi: ");gets(Chuoi);
 8     strcpy(s,Chuoi);
 9     printf(Chuoi dich: );puts(s);
10     getch();
11     return 0;
12 }

Sao chép một phần chuỗi, hàm strncpy()[edit]

Hàm này cho phép chép n ký tự đầu tiên của chuỗi nguồn sang chuỗi đích.

Cú pháp: char *strncpy(char *Des, const char *Source, size_t n)

Trích một phần chuỗi, hàm strchr()[edit]

Để trích một chuỗi con của một chuỗi ký tự bắt đầu từ một ký tự được chỉ định trong chuỗi cho đến hết chuỗi, ta sử dụng hàm strchr().

Cú pháp: char *strchr(const char *str, int c)

Ghi chú:

  • Nếu ký tự đã chỉ định không có trong chuỗi, kết quả trả về là NULL.
  • Kết quả trả về của hàm là một con trỏ, con trỏ này chỉ đến ký tự c được tìm thấy đầu tiên trong chuỗi str.

Tìm kiếm nội dung chuỗi, hàm strstr()[edit]

Hàm strstr() được sử dụng để tìm kiếm sự xuất hiện đầu tiên của chuỗi s2 trong chuỗi s1.

Cú pháp: char* strstr(const char *s1, const char *s2)

Kết quả trả về của hàm là một con trỏ chỉ đến phần tử đầu tiên của chuỗi s1 có chứa chuỗi s2 hoặc giá trị NULL nếu chuỗi s2 không có trong chuỗi s1.

Ví dụ: Viết chương trình sử dụng hàm strstr() để lấy ra một phần của chuỗi gốc bắt đầu từ chuỗi "hoc".

 1 #include<conio.h>
 2 #include<stdio.h>
 3 #include<string.h>
 4 int main()
 5 {
 6     char Chuoi[255],*s;
 7     printf("Nhap chuoi: ");gets(Chuoi);
 8     s=strstr(Chuoi,"hoc");
 9     printf("Chuoi trich ra: ");puts(s);
10     getch();
11     return 0;
12 }
13 
14 ==== So sánh chui, hàm stricmp() ====
15 Hàm này thc hin vic so sánh trong n ký t đầu tiên ca 2 chui s1 và s2, gia ch thường và ch hoa không phân bit.
16 
17 Cú pháp: <code>int stricmp(const char*s1, const char *s2)</code>
18 
19 Kết qu tr v tương t như kết qu tr v ca hàm strcmp()
20 
21 ==== Khi to chui, hàm memset() ====
22 Hàm này được s dng để đặt n ký t đầu tiên ca chui là ký t c.
23 
24 Cú pháp: <code>memset(char *Des, int c, size_t n)</code>
25 
26 ==== Đổi t chui ra s, hàm atoi(), atof(), atol() (trong stdlib.h) ====
27 Để chuyn đổi chui ra s, ta s dng các hàm trên.
28 
29 Cú pháp: 
30 * <code>int atoi(const char *s)</code>: chuyn chui thành s nguyên
31 * <code>long atol(const char *s)</code>: chuyn chui thành s nguyên dài
32 * <code>float atof(const char *s)</code>: chuyn chui thành s thc
33 
34 Nếu chuyn đổi không thành công, kết qu tr v ca các hàm là 0.
35 
36 Ngoài ra, thư vin string.h còn h tr các hàm x lý chui khác, ta có th đọc thêm trong phn tr giúp..
37 
38 == Bài tp ==
39 '''1.''' Viết chương trình nhp mt chui ký t t bàn phím, xut ra màn hình mã Ascii ca tng ký t có trong chui.
40 
41 '''2.''' Viết chương trình nhp mt chui ký t t bàn phím, xut ra màn hình chui đảo ngược ca chui đó. Ví d đảo ca "abcd egh" là "hge dcba".
42 
43 '''3.''' Viết chương trình nhp mt chui ký t và kim tra xem chui đó có đối xng không.
44 :Ví d : Chui ABCDEDCBA là chui đối xng.
45 
46 '''4.''' Nhp vào mt chui bt k, hãy đếm s ln xut hin ca mi loi ký t.
47 
48 '''5.''' Viết chương trình nhp vào mt chui. 
49 * In ra màn hình t bên trái nht và phn còn li ca chui. Ví d: "Nguyễn Văn Minh" in ra thành:
50  Nguyn
51  Văn Minh
52 * In ra màn hình t bên phi nht và phn còn li ca chui. Ví d: "Nguyễn Văn Minh" in ra thành:
53  Minh
54  Nguyn Văn
55 
56 '''6.''' Viết chương trình nhp vào mt chui ri xut chui đó ra màn hình dưới dng mi t mt dòng.
57 
58 Ví d: "Nguyễn Văn Minh"
59 
60 In ra : 
61  Nguyn
62  Văn
63  Minh 
64 
65 '''7.''' Viết chương trình nhp vào mt chui, in ra chui đảo ngược ca nó theo tng t.
66 :Ví d : chui "Nguyễn Văn Minh" đảo thành "Minh Văn Nguyễn"
67 
68 '''8.''' Viết chương trình đổi s tin t s thành ch.
69 
70 '''9.''' Viết chương trình nhp vào h và tên ca mt người, ct b các khong trng không cn thiết (nếu có), tách tên ra khi h và tên, in tên lên màn hình. Chú ý đến trường hp c h và tên ch có mt t.
71 
72 '''10.''' Viết chương trình nhp vào h và tên ca mt người, ct b các khong trng bên phi, trái và các khong trng không có nghĩa trong chui. In ra màn hình toàn b h tên người đó dưới dng ch hoa, ch thường.
73 
74 '''11.''' Viết chương trình nhp vào mt danh sách h và tên ca n người theo kiu ch thường, đổi các ch cái đầu ca h, tên và ch lót ca mi người thành ch hoa. In kết qu lên màn hình.
75 
76 '''12.''' Viết chương trình nhp vào mt danh sách h và tên ca n người, tách tên tng người ra khi h và tên ri sp xếp danh sách tên theo th t t đin. In danh sách h và tên sau khi đã sp xếp.
77 
78 [[Category:VI]]