1. Trang chủ
  2. » Luận Văn - Báo Cáo

Tìm hiểu về các hàm cơ bản chuỗi ký tự và giải quyết một số bài toán cơ bản chuỗi kí tự

13 1 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Nội dung

Chuỗi kí tự là 1 trong những kiểu dữ liệu được sử dụng rất phổ biến. Trong hầu hết các ứng dụng đều có nhiều thông tin được biểu diễn dưới dạng văn bản, tức là chuỗi kí tự. VD: nội dung SMS, email, thông tin sinh viên (họ tên, quê quán…),….. Chuỗi chính là tập hợp gồm nhiều kí tự (char) lại với nhau. Một dãy bất kỳ các kí tự (kể cả dấu cách) do vậy nó có thể được lưu bằng mảng kí tự hay còn gọi là mảng 1 chiều các kí tự. Tuy nhiên để chương trình có thể nhận biết được mảng kí tự này là 1 chuỗi thì theo nguyên tắc phải có kí tự NULL (\0 – có mã ASCII là 0) làm kí hiệu kết thúc chuỗi. Để thao tác dễ dàng hơn với chuỗi ký tự, ngôn ngữ lập trình C cung cấp cho người dùng thư viện string.h với các hàm cơ bản có thể kể đến như strlen() trả về độ dài của chuỗi; strcpy() sao chép chuỗi nguồn sang chuỗi đích; strcat() nối chuỗi nguồn vào cuối chuỗi đích; strcmp() so sánh hai chuỗi;…. Sau đây chúng ta sẽ tìm hiểu lần lượt các hàm cơ bản này và ứng dụng của chúng trong việc giải quyết các bài toán cơ bản hay gặp như: đếm số ký tự trong chuỗi, tìm một chuỗi con trong một chuỗi, đảo ngược chuỗi, tách chuỗi, chuẩn hóa chuỗi, ….

MỤC LỤC MỤC LỤC i LỜI NÓI ĐẦU ii CÁC HÀM CƠ BẢN CỦA CHUỖI KÝ TỰ 1.1 Hàm strlen() - Hàm trả độ dài chuỗi kí tự 1.2 Hàm strcpy() - Hàm chép chuỗi nguồn đến chuỗi đích .1 1.3 Hàm strncpy() - Hàm chép n ký tự 1.4 Hàm strcat() - Hàm nối chuỗi 1.5 Hàm strcmp() - Hàm so sánh chuỗi 1.6 Hàm strstr() - Hàm tìm kiếm chuỗi 1.7 Hàm strchr() - Hàm tìm kiếm ký tự MỘT SỐ BÀI TỐN CƠ BẢN CHUỖI KÍ TỰ .6 2.1 Tìm kiếm chuỗi chuỗi .6 2.2 Đếm số từ có chuỗi 2.3 Chuẩn hóa chuỗi 2.4 Đảo ngược từ chuỗi KẾT LUẬN 11 i LỜI NĨI ĐẦU Chuỗi kí tự kiểu liệu sử dụng phổ biến Trong hầu hết ứng dụng có nhiều thơng tin biểu diễn dạng văn bản, tức chuỗi kí tự VD: nội dung SMS, email, thông tin sinh viên (họ tên, quê quán…),… Chuỗi tập hợp gồm nhiều kí tự (char) lại với Một dãy kí tự (kể dấu cách) lưu mảng kí tự - hay cịn gọi mảng chiều kí tự Tuy nhiên để chương trình nhận biết mảng kí tự chuỗi theo ngun tắc phải có kí tự NULL ('\0' – có mã ASCII 0) làm kí hiệu kết thúc chuỗi Để thao tác dễ dàng với chuỗi ký tự, ngôn ngữ lập trình C cung cấp cho người dùng thư viện string.h với hàm kể đến strlen() - trả độ dài chuỗi; strcpy() - chép chuỗi nguồn sang chuỗi đích; strcat() - nối chuỗi nguồn vào cuối chuỗi đích; strcmp() - so sánh hai chuỗi;… Sau tìm hiểu hàm ứng dụng chúng việc giải toán hay gặp như: đếm số ký tự chuỗi, tìm chuỗi chuỗi, đảo ngược chuỗi, tách chuỗi, chuẩn hóa chuỗi, … ii CÁC HÀM CƠ BẢN CỦA CHUỖI KÝ TỰ 1.1 Hàm strlen() - Hàm trả độ dài chuỗi kí tự Hàm strlen() C sử dụng để trả độ dài chuỗi kí tự Độ dài chuỗi số lượng kí tự có chuỗi Hàm đếm số lượng ký tự chuỗi gặp ký tự kết thúc chuỗi '\0' Ví dụ: Chuỗi ‘Thong tin’ có độ dài chuỗi có kí tự Khai báo: strlen(); Ví dụ: Để tính in hình độ dài chuỗi a= “Thong tin”, ta thực sau: #include #include int main() { char a[]= "Thong tin"; printf("Do dai cua chuoi a la: %d", strlen(a)); } Khi kết hiển thị hình là: Do dai cua chuoi a la: 1.2 Hàm strcpy() - Hàm chép chuỗi nguồn đến chuỗi đích Hàm Strcpy() lập trình C hàm chuỗi sử dụng để chép chuỗi nguồn đến chuỗi đích Hàm có dạng: char *strcpy(, ); Hàm chép tồn chuỗi nguồn vào chuỗi đích, bao gồm kí tự kết thúc chuỗi `\0` Hàm trả trỏ tới chuỗi đích Ưu điểm hàm strcpy() giúp cho việc chép chuỗi trở nên dễ dàng tiết kiệm thời gian Tuy nhiên, việc sử dụng hàm cần phải cẩn thận để tránh gây lỗi vượt kích thước chuỗi đích liệu trước chép cịn chuỗi đích bị thay liệu chuỗi nguồn Ví dụ: Sao chép chuỗi b= “Thong tin” sang chuỗi a= “Truong Si quan” sau in chuỗi a hình: #include #include int main() { char a[]= "Truong Si quan ", b[]= "Thong tin"; printf("Chuoi duoc ghep la: "); strcpy(a, b); puts(a); } Kết in hình là: Thong tin 1.3 Hàm strncpy() - Hàm chép n ký tự Hàm strncpy() thư viện string.h sử dụng để chép n ký tự chuỗi vào chuỗi khác Cú pháp hàm sau: char *strncpy(, , < chuỗi nguỗ0 n>); Hàm trả trỏ tới chuỗi đích Các bước thực hàm strcat() sau: Tìm vị trí kết thúc chuỗi đích hàm strlen() Sao chép nội dung chuỗi nguồn vào sau chuỗi đích hàm strcpy() Trả trỏ tới chuỗi đích Lưu ý rằng, hàm strcat() khơng kiểm tra tính hợp lệ địa không kiểm tra chồng chéo chuỗi Ví dụ: Nối chuỗi b= “Thong tin” vào sau chuỗi a= “Truong Si quan ” in hình chuỗi kết quả, ta thực sau #include #include int main() { char a[]= "Truong Si quan ", b[]= "Thong tin"; printf("Chuoi duoc ghep la: "); puts(strcat(a, b)); } Khi kết hiển thi hình là: Truong Si quan Thong tin 1.5 Hàm strcmp() - Hàm so sánh chuỗi Hàm strcmp() giúp tìm hiệu mã ký tự ASSCII chuỗi C Thông qua hiệu này, so sánh chuỗi C tìm quan hệ lớn nhỏ chúng Chúng ta sử dụng hàm strcmp() để so sánh chuỗi C với cú pháp sau đây: int *strcmp(, ); Hàm strcmp() tiến hành so sánh ký tự hai chuỗi, chúng giống nhau, ký tự so sánh xuất cặp ký tự khác hai chuỗi Khi đó, mã ký tự ASSCII ký tự đại diện cho chuỗi dùng để so sánh lớn nhỏ Sau xác định cặp ký tự khác chuỗi, hàm strcmp() trả hiệu mã ký tự ASSCII chúng, cách so sánh giá trị với số 0, so sánh chuỗi sau: Biểu thức Giá trị trả Kết strcmp(str1, str2) >0 str1 > str2 strcmp(str1, str2) =0 str1 = str2 strcmp(str1, str2) 0){ printf("%s lon hon %s", s1,s2); } else printf("%s nho hon %s", s1,s2); } return 0; Kết chương trình: Ma ascii cua a:97 Ma ascii cua A:65 Ma ascii cua b:98 Hieu ma ascii: 33 ab lon hon aAb Ở ví dụ trên, cặp ký tự khác hai chuỗi ban đầu b A, hàm strcmp() so sánh chuỗi s1 s2 thực chất so sánh ký tự 1.6 Hàm strstr() - Hàm tìm kiếm chuỗi Hàm strstr() C giúp tìm kiếm chuỗi chuỗi C Kết trả địa vị trí tìm thấy chuỗi chuỗi ban đầu dạng trỏ chuỗi c Chúng ta sử dụng hàm strstr() để tìm kiếm ký tự chuỗi C với cú pháp sau đây: char *strstr(, ); Hàm strstr() trả địa vị trí tìm thấy chuỗi ký tự keyword chuỗi str tính từ đầu chuỗi, trả vị trí dạng trỏ chuỗi c Ví dụ: #include #include int main(void) { char str[30] = “Good school”; char *p; p = strstr(str, "o"); printf("%s\n", p); } Kết chương trình: ood school Bạn thấy có chuỗi ký tự oo chuỗi "Good School" có vị trí xuất chuỗi trả dạng trỏ chuỗi c, sử dụng hàm strstr() để tìm kiếm ký tự chuỗi C mà thơi 1.7 Hàm strchr() - Hàm tìm kiếm ký tự Hàm strchr() giúp tìm kiếm ký tự định chuỗi C Kết trả vị trí tìm thấy ký tự chuỗi ban đầu dạng trỏ chuỗi C Cách sử dụng hàm strchr() tương tự hàm strstr(), nhiên đối tượng tìm kiếm chuỗi ban đầu hai hàm khác Hàm strchr() tiến hành tìm kiếm ký tự định, cịn hàm strstr() tiến hành tìm kiếm chuỗi con, từ chuỗi ban đầu Chúng ta sử dụng hàm strchr() để tìm kiếm ký tự chuỗi C với cú pháp sau đây: char *strchr(,); Hàm strchr() trả vị trí tìm thấy ký tự chr chuỗi str tính từ đầu chuỗi, trả vị trí dạng trỏ chuỗi c Ví dụ: #include #include int main() { char str[30] = "Good school"; char *p; p = strchr(str, 'o'); printf("%s\n", p); } Kết chương trình: ood school Bạn thấy có nhiều ký tự o chuỗi "Good School" có vị trí xuất ký tự trả dạng trỏ chuỗi, sử dụng hàm strchr() để tìm kiếm ký tự chuỗi C mà thơi MỘT SỐ BÀI TỐN CƠ BẢN CHUỖI KÍ TỰ 2.1 Tìm kiếm chuỗi chuỗi Bài tốn: Viết chương trình nhập vào chuỗi, sau nhập chuỗi kiểm tra xem chuỗi có xuất chuỗi có trước hay không? Ý tưởng: Sử dụng hàm strstr() để giải toán Lưu kết vào biến Nếu giá trị biến NULL tức khơng có chuỗi chuỗi Nếu gái trị biến khác NULL in biến hình Chương trình: #include "stdio.h" #include "string.h" int main() { char chuoi[1000]; char chuoi_con[1000]; printf("Nhap vao chuoi: "); gets(chuoi); fflush(stdin); printf("Nhap vao chuoi can tim: "); gets(chuoi_con); fflush(stdin); char *kq = strstr(chuoi, chuoi_con); if(kq!=NULL) { printf("Tim thay chuoi con!"); } else { printf("Khong tim thay chuoi con!"); } } return 0; 2.2 Đếm số từ có chuỗi Bài tốn: Đếm chuỗi cho có từ? Ý tưởng: Gán biến dem=0 Duyệt chuỗi, s[i] khoản trắng s[i+1] khác khoản trắng tăng đếm +1 Nếu s[0] khác khoản trắng dem=1 cịn có khoản trắng vịng lặp duyệt qua Chương trình: #include #include int demsotu(char *s); int demsotu(char *s) { int n=strlen(s),i; int dem=0; if(s[0]!=' ') dem=1; for( i=0;i dau && s[cuoi] == ' ') cuoi ; if (s[dau] >= 'a' && s[dau]

Ngày đăng: 30/06/2023, 14:15

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w