Bài giảng Kỹ thuật lập trình - Chương 7: Chuỗi ký tự - Trần Minh Thái

1. Giới thiệu Chuỗi 2. Khai báo và khởi tạo chuỗi 3. Nhập chuỗi 4. Xuất chuỗi 5. Một số hàm thư viện thao tác trên chuỗi. 6. Một số ví dụ về chuỗi 7. Mảng các chuỗi 8. Mảng con trỏ đến các chuỗi

ppt40 trang | Chia sẻ: candy98 | Lượt xem: 464 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Bài giảng Kỹ thuật lập trình - Chương 7: Chuỗi ký tự - Trần Minh Thái, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
CHUỖI KÝ TỰ Chương 7 1. Giới thiệu Chuỗi2. Khai báo và khởi tạo chuỗi3. Nhập chuỗi4. Xuất chuỗi 5. Một số hàm thư viện thao tác trên chuỗi.6. Một số ví dụ về chuỗi7. Mảng các chuỗi 8. Mảng con trỏ đến các chuỗiNội dungMột chuỗi ký tự (chuỗi) là mảng một chiều các ký tự được kết thúc bởi ký tự NULL (\0). Số lượng các ký tự khác NULL trong chuỗi gọi là chiều dài của chuỗi. Ghi chú: Như mảng 1 chiều, tên chuỗi ký tự cũng được xem là một hằng địa chỉ biểu thị địa chỉ của phần tử đầu tiên. Giới thiệu chuỗiKhai báochar [độ dài] ; // không khởi tạochar [độ dài] = chuỗi ký tự ; // có khởi tạochar [] = chuỗi ký tự ; // có khởi tạoĐộ dài mảng là số kí tự tối đa có thể có trong chuỗi tính từ đầu mảng đến dấu kết thúc chuỗi (không kể dấu kết thúc chuỗi ‘\0’).Độ dài tối đa của chuỗi = độ dài mảng - 1. Ví dụ:char hoten[26] ; // chuỗi họ tên chứa tối đa 25 kí tựchar monhoc[31] = "NNLT C++" ;char thang[] = "Mười hai" ; // độ dài mảng = 9char *str = “Hello”; //Dùng con trỏKhai báo và khởi tạo chuỗiTruy cập một kí tự trong chuỗi: cú pháp giống như mảng. char s[50] = "I\'m a student" ; // chú ý kí tự ' phải được viết là \'cout > vẫn dùng được nhưng có nhiều hạn chế. char s[60] ; cin >> s ; cout )Dùng hàm cin.getline(s,n) để nhập chuỗi kí tự. Hàm có 2 đối số với s là chuỗi cần nhập nội dung và n-1 là số kí tự tối đa của chuỗi. Ví dụ 1 : Xét đoạn lệnh sauchar s[10] ;cin.getline(s, 10) ;cout )Dùng hàm gets() của thư viện stdio.h. Hàm này có cú pháp sau: char *gets(char *s);Hàm gets() đọc các ký tự từ bàn phím (stdio.h) vào trong mảng trỏ đến bởi s cho đến khi nhấn Enter. Ký tự null sẽ được đặt sau ký tự cuối cùng của chuỗi nhập vào trong mảng.Hoặc ta có thể dùng cin (Console INput). Cú pháp như s sau: cin >> sVí dụ 1 : Xét đoạn lệnh sauchar s[10] ;gets(s) ;Nhập chuỗi ký tựVí dụ 2 : Nhập một ngày tháng dạng Mỹ (mm/dd/yy), đổi sang ngày tháng dạng Việt Nam rồi in ra màn hình.#include main(){ char US[9], VN[9]; // khởi tạo trước hai dấu / cin.getline(US, 9) ; // nhập ngày tháng, ví dụ "05/01/99“ gets(US); VN[0] = US[3]; VN[1] = US[4] ; // ngày VN[3] = US[0]; VN[4] = US[1] ; // tháng VN[6] = US[6]; VN[7] = US[7] ; // năm cout main(){ char US[9], VN[9] = " / / " ; // khởi tạo trước hai dấu / cin.getline(US, 9) ; // nhập ngày tháng, ví dụ "05/01/99“ gets(US); VN[0] = US[3]; VN[1] = US[4] ; // ngày VN[3] = US[0]; VN[4] = US[1] ; // tháng VN[6] = US[6]; VN[7] = US[7] ; // năm cout main(){ char US[9], VN[9] = " / / " ; // khởi tạo trước hai dấu / cin.getline(US, 9) ; // nhập ngày tháng, ví dụ "05/01/99“ gets(US); VN[0] = US[3]; VN[1] = US[4] ; // ngày VN[3] = US[0]; VN[4] = US[1] ; // tháng VN[6] = US[6]; VN[7] = US[7] ; // năm cout #include #include #define MAX 80 void DaoNguoc(char s[MAX]) ; void ChieuDai(char s[MAX]) ; int main() { char s[MAX]; clrscr(); cout cho phép thao tác, xữ lý chuỗi tí tự:size_t strlen( const char* s );int strcmp( const char* s1, const char* s2 );int strcmpi( const char* s1, const char* s2 );char* strcpy( char* dest, const char* src );char* strcat( char* dest, const char* src );Con trỏ và chuỗi ký tựMột số hàm xử lí chuỗi (#include )1. strcpy(s, t) :Hàm sẽ sao chép toàn bộ nội dung của chuỗi t (kể cả kí tự kết thúc chuỗi) vào cho chuỗi s. Để sử dụng hàm này cần đảm bảo độ dài của mảng s ít nhất cũng bằng độ dài của mảng t.Ví dụ:char s[10], t[10] ;t = "Face" ; // không được dùngs = t ; // không được dùngstrcpy(t, "Face") ; // được, gán "Face" cho tstrcpy(s, t) ; // được, sao chép t sang scout s2. Trong trường hợp chỉ quan tâm đến so sánh bằng, nếu hàm trả lại giá trị 0 là 2 chuỗi bằng nhau và nếu giá trị trả lại khác 0 là 2 chuỗi khác nhau.Ví dụ: if (strcmp(s,t)) cout #include #include main(){ char qc[100] = "Quảng cáo miễn phí: Không có tiền thì không có kem. "; int dd = strlen(qc); char tam[100] ; strcpy(tam, qc) ; strcat(qc, tam) ; // nhân đôi dòng quảng cáo clrscr(); // xoá màn hình char hien[31] ; // chứa chuỗi dài 30 kí tự để hiện i = 0; while (!kbhit()) { // trong khi chưa ấn phím bất kỳ strncpy(hien, s+i, 30); hien[30] = '\0'; // copy 30 kí tự từ qc[i] sang hien gotoxy(20,10); cout #include #include void main(){ char pw[11]; int solan = 0; // Cho phep nhap 3 lan do { clrscr(); gotoxy(30,12) ; int i = 0; while ((pw[i]=getch()) != 13 && ++i #include #include void main(){char s1[80], s2[80];cout #include #include void main(){ char str[80], ch; int num=0; cout > ch; for(int i=0 ; i> str[0] //Tương đương với lệnh trênĐể xuất chuỗi thứ hai ra màn hình, ta dùng lệnh:puts(str[1]);cout #include #include void main(){ char name[5][20]; for(int i=0 ; i> name[i]; } cout #include #include #include void main(){ char *name[5]; for(int i=0 ; i#include #include #include void main(){ char *name[5]; for(int i=0 ; i<5 ; i++) name[i] = (char *)malloc(20); for(int i=0 ; i<5 ; i++) { cout << "Input name " << i+1 <<": "; gets(name[i]); } cout << "List of names: "; for(int i=0 ; i<5 ; i++) cout << name[i] << ", ";}Mảng trỏ đến các chuỗi