Đang tải... (xem toàn văn)
bài viết trình bày các kiến thức như Trình bày được chuỗi là gì ,Trình bày được nguyên tắc kết thúc của chuỗi ,Áp dụng được các bài toán thường gặp trong xử lý chuỗi ,Đếm số ký tự trong chuỗi ,So sánh hai chuỗi Copy chuỗi ,Loại bỏ ký tự trong chuỗi,Phân rã chuỗi,hi vọng những kiến thức này sẽ trợ giúp bạn tốt cho học tập
www.hoasen.edu.vn Cng Đi hc Hoa Sen xây dng tương lai Chuỗi (string) và các bài toán xử lý chuỗi http://www.stellman-greene.com 1 www.hoasen.edu.vn Cng Đi hc Hoa Sen xây dng tương lai Người học sẽ đạt được Trình bày được chuỗi là gì Trình bày được nguyên tắc kết thúc của chuỗi Áp dụng được các bài toán thường gặp trong xử lý chuỗi: Đếm số ký tự trong chuỗi So sánh 2 chuỗi Copy chuỗi Loại bỏ ký tự trong chuỗi Phân rã chuỗi 2 www.hoasen.edu.vn Cng Đi hc Hoa Sen xây dng tương lai Khái niệm về Chuỗi Khái niệm về Chuỗi Là mảng một chiều của các ký t (loi char) Ví dụ: char hoten[20] = “Nguyen Thi A”; char ngaysinh[20] = “20/03/1992”; Ký t trong chuỗi được truy cập như là phần tử của mảng Hoten[0] = ‘N’; Hoten[1] = ‘g’; Hoten[11] = ‘A’; ngaysinh[0] = ‘2’; ngaysinh[2] = ‘/’; 3 www.hoasen.edu.vn Cng Đi hc Hoa Sen xây dng tương lai Nguyên Tắc Kết Thúc Chuỗi Nguyên Tắc Kết Thúc Chuỗi Theo quy ước, chuỗi được kết thúc bằng ký t null hay ‘\0’ Ví dụ: s[] = “abc”; → s[0] = ‘a’; s[1] = ‘b’; s[2] = ‘c’; s[3] = ‘\0’; → mảng s[] có 4 ký tự ký t ‘\0’ thường được dng để phát hiện s kết thúc của chuỗi Lưu ý: ‘a’ và “a” hoàn toàn khác nhau ‘a’ là 1 ký tự “a” là 1 chuỗi có 2 ký tự ‘a’ và ‘\0’ 4 www.hoasen.edu.vn Cng Đi hc Hoa Sen xây dng tương lai 5 Giả sử khai báo: char S[80]; Nhập chuỗi scanf(“%s”,&S); hoặc gets(S); Xuất chuỗi printf(S); printf(“%s”,S); puts(S); • Hàm scanf không nhập chuỗi có khoảng trắng được • Để nhập chuỗi có khoảng trắng ta dùng hàm gets • Nếu vùng đệm keyboard có dữ liệu thì dữ liệu sẽ chuyển vào biến. • Để nhập một chuỗi mới chúng ta phải xoá bộ đệm keyboard bằng hàm fflush(stdin) Nhập/xuất chuỗi Nhập/xuất chuỗi www.hoasen.edu.vn Cng Đi hc Hoa Sen xây dng tương lai 6 #include<stdio.h> #include<conio.h> void main() { clrscr(); char S[20]; printf("Nhap chuoi bang ham scanf "); scanf("%s", &S); printf("\nChuoi vua nhap: %s", S); printf("\nNhap chuoi bang ham gets"); gets(S); printf("\nChuoi vua nhap:"); puts(S); getch(); } Nhập/xuất chuỗi Nhập/xuất chuỗi puts(S) tương đương với printf(“%s\n”,S) www.hoasen.edu.vn Cng Đi hc Hoa Sen xây dng tương lai 7 Chuỗi là một mảng các ký t. Vì thế chúng ta có thể truy xuất vào phần tử ký t của nó bằng chỉ số. #include<stdio.h> #include<conio.h> #include<ctype.h> void main() { clrscr(); char S[20]; printf("Nhap chuoi: "); gets(S); int i=0; while(S[i]!=NULL) { S[i] = toupper(S[i]); i++; } printf("Chuoi vua nhap duoc viet hoa:"); puts(S); getch(); } Nhập 1 chuỗi rồi đổi chuỗi đó ra chữ hoa Truy xuất từng ký tự của chuỗi Truy xuất từng ký tự của chuỗi www.hoasen.edu.vn Cng Đi hc Hoa Sen xây dng tương lai 8 strlen(s) Cho biết độ dài của chuỗi s Ví dụ : n = strlen(“abcd”) n = 4 strcmp(s1, s2) So sánh chuỗi s1 với s2. Ví dụ : n = strcmp(s1, s2); Nếu n > 0 thì s1 > s2 Nếu n = 0 thì s1 = s2 Nếu n < 0 thì s1 < s2 (So sánh dựa vào bảng mã ASCII) Một số hàm về chuỗi Một số hàm về chuỗi www.hoasen.edu.vn Cng Đi hc Hoa Sen xây dng tương lai 9 strcpy(đích, nguồn) Chép chuỗi nguồn vào chuỗi đích (gán chuỗi) Ví dụ : strcpy(ten, “Nguyen Van A”); ten = Nguyen Van A strcat(s1, s2) Nối chuỗi s2 vào sau s1. Ví dụ : s1 = “abcde”; s2 = ”ghk” strcat(s1, s2) ; s1=abcdeghk Một số hàm về chuỗi Một số hàm về chuỗi www.hoasen.edu.vn Cng Đi hc Hoa Sen xây dng tương lai 10 toupper(ch) Đổi ký tự ch thành chữ hoa isupper(ch) Kiểm tra ký tự ch có phải là chữ hoa không tolower(ch) Đổi ký tự ch thành chữ thường islower(ch) Kiểm tra ký tự ch có phải là chữ thường không Một số hàm về chuỗi Một số hàm về chuỗi [...]...www.hoasen.edu.vn VD 1: truy cập ký tự trong chuỗi Bài toán: nhập tên và xuất tên in ngược BEGIN Input: chuỗi tên Output: chuỗi tên in ngược 1 Nhập chuỗi 2 Xử lý chuỗi: Loại bỏ ký tự ‘\n’ và ‘\0’ khi nhập chuỗi Copy chuỗi theo thứ ngược Thêm ‘\0’ vào cuối chuỗi 3 Xuất chuỗi END Cùng Đại học Hoa Sen xây dựng tương lai 11 www.hoasen.edu.vn VD 1: truy cập ký tự trong chuỗi #include #include ... (loại char) Xử lý chuỗi giống như xử lý mảng dữ liệu 1 chiều Chỉ 1 điều khác biệt: Chuỗi kết thúc với ‘\0’ hay NULL Quy các bài toán xử lý chuổi về các bài toán nhỏ nêu ra trong các ví dụ Cùng Đại học Hoa Sen xây dựng tương lai 28 www.hoasen.edu.vn Bài tập điểm cộng về nhà 1 2 3 4 5 6 7 Viết chương trình nhập họ tên của một người rồi in ra màn hình Viết chương trình nhập vào một chuỗi, rồi... input.txt, khachhang.txt và nhập dữ liệu vào mảng 1.3 Loại bỏ các khoảng trắng của tên 1.3.1 xóa khoảng trắng khúc đầu của chuỗi 1.3.2 xóa khoảng trắng khúc cuối của chuỗi 1.3.3 thay khoảng trắng giữa các từ bằng 1 ' ' So sánh tên Cho mỗi tên IP trong input.txt Cho mỗi tên KH trong khachhang.txt So sánh tên IP và tên KH » Nếu giống nhau thì xuất tất cả thông tin KH » Còn không xử lý tiếp Cùng Đại... www.hoasen.edu.vn VD 2: So sánh chuỗi Bài toán: tương tự chức năng C43 course work Yêu cầu: Liệt kê tất cả thông tin của khách hàng có tên trong file input.txt Input : khachhang.txt, input.txt input.txt chứa các chuỗi ký tự là HoTenKH Output: output.txt Cùng Đại học Hoa Sen xây dựng tương lai 14 www.hoasen.edu.vn VD 2: So sánh chuỗi Giải thuật: 1 – Đọc dữ liệu từ file và nhập vào mảng 1.1 Mở file input.txt,... trình nhập họ tên của một người rồi in ra màn hình Viết chương trình nhập vào một chuỗi, rồi in các ký tự của chuỗi ra màn hình (mỗi ký tự là 1 hàng) Viết chương trình nhập một chuỗi, hãy cho biết chuỗi đó có tất cả bao nhiêu ký tự, số ký tự khoảng trắng Nhập vào một chuỗi, hãy in ngược chuỗi đã nhập Nhập họ tên sinh viên rồi in ra tên viết tắt của sinh viên đó Ví dụ nhập : Nguyen Thi Lan Anh ... { int i, j; char name[MAXSTR], opname[MAXSTR]; // 1 nhập chuỗi printf("\nHi! What is your name: "); gets(&name); // 2 xử lý chuỗi: copy ngược các ký tự for(j=0, i=strlen(name)-1; i>=0; i , j++ ) opname[j] = name[i]; opname[j] = '\0‘; Cùng Đại học Hoa Sen xây dựng tương lai 12 www.hoasen.edu.vn VD 1: truy cập ký tự trong chuỗi // 3 Xuất chuỗi printf("Hello, %s Nice to meet you!\n", name); printf("Your... work Yêu cầu: so sánh tuổi của 2 ngày sinh lưu dạng chuỗi Input : hai ngày sinh Output: xuất theo tuổi tăng dần Giải thuật: 1.nhập 2 ngày sinh 2.phân rã chuỗi ngày sinh thành 3 chuỗi: ngày, tháng, năm 3.đổi các chuỗi thành số 4.so sánh 2 tuổi và xuất theo tuổi tăng dần Cùng Đại học Hoa Sen xây dựng tương lai 22 www.hoasen.edu.vn VD 3: phân rã chuỗi #include #include #include... 2: So sánh chuỗi // 1.3.3 thay khoang trang giua cac tu bang 1 ' ' for( i=0; i . S[20]; printf("Nhap chuoi bang ham scanf "); scanf("%s", &S); printf(" Chuoi vua nhap: %s", S); printf(" Nhap chuoi bang ham gets"); gets(S); printf(" Chuoi vua. main() { clrscr(); char S[20]; printf("Nhap chuoi: "); gets(S); int i=0; while(S[i]!=NULL) { S[i] = toupper(S[i]); i++; } printf(" ;Chuoi vua nhap duoc viet hoa:"); puts(S); getch(); } Nhập. khuc dau cua chuoi while( i < len && (s[i] == ' ’ || s[i] == ' ’ || s[i] == ' ') ) i++; strcpy(s,&s[i]); // 1.3.2 xoa khoang trang khuc cuoi cua chuoi len =