1 / 34

CHƯƠNG VII:CHUỔI

CHƯƠNG VII:CHUỔI. KHÁI NIỆM. 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ự ‘’ (còn được gọi là ký tự NULL trong bảng mã Ascii). Các hằng ký tự được đặt trong cặp dấu nháy kép V í dụ : char jenny [20];. KHAI BÁO. Khai báo theo mảng Ví dụ :

amma
Download Presentation

CHƯƠNG VII:CHUỔI

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CHƯƠNG VII:CHUỔI

  2. KHÁI NIỆM • 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 ký tự được đặt trong cặp dấu nháy kép Ví dụ : char jenny [20];

  3. KHAI BÁO • Khai báo theo mảng • Ví dụ: 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. char <Biến> [Chiều dài tối đa]

  4. KHAI BÁO • Khai báo theo con trỏ • Cú pháp: • Ví dụ: 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. char *<Var_name>

  5. Vừa khai báo vừa gán giá trị • Chuổi ký tự giống như mảng bình thường do đó để khởi tạo một chuổi ký tự với những giá trị xác định ta có thể thực hiện tương tự như với mảng. • Ví dụ: char mystring[] = { 'H', 'e', 'l', 'l', 'o', '\0' }; Hoặc char mystring [] = "Hello";

  6. Vừa khai báo vừa gán giá trị Cú pháp: Ví dụ: #include<iostream.h> #include<conio.h> void main() { char Chuoi[]= “Truong Dai Hoc Cong Nghiep TP.HCM” ; cout<<Chuoi ; getch(); } char <Biến>[ ]=<”Hằng ”>

  7. CÁC THAO TÁC TRÊN CHUỖI KÝ TỰ Nhập xuất Để nhập dữ liệu kiểu ký tự hoặc chuỗi từ bàn phím ta dùng hàm get() Cú pháp: Hoặc cin.get(<biến >) cin.get()

  8. CÁC THAO TÁC TRÊN CHUỖI KÝ TỰ • Nhập một chuỗi ký tự tối đa n-1 ký tự từ bàn phím dùng hàm getline() • Cú pháp: Hàm cho phép nhập vào biến st (st là một mảng char) n-1 ký tự, nếu nhập hơn thì phần ký tự còn lại sẽ để trên vùng đệm cin.getline(st,n)

  9. Lưu ý Ta cũng có thể dùng cin để nhập ký tự hoặc chuỗi nhưng trong trường hợp này nó không cho phép nhập ký tự trắng hoặc chuỗi có ký tự trắng

  10. Ví dụ : #include <iostream.h> #include <conio.h> void main() { const int MAX=10; char st[MAX]; cout <<"Nhap mot chuoi toi da “<<(MAX-1)<<” ky tu "; cin.getline(st,MAX); cout <<”Chuoi vua nhap la :” <<st; getch(); return; }

  11. Lưu ý: • Khi nhập dữ liệu nếu chúng ta nhập quá số ký tự qui định (MAX-1) thì có thể ảnh hưởng đến những lệnh nhập sau hoặc có thể làm ảnh hưởng đến hoạt động của máy tính. • Để tránh tình trạng này thường sau khi nhập dữ liệu bằng cin, cin.get, cin.getline ta sử dụng hàm cin.ignore

  12. Lưu ý: • Cú pháp • Công dụng của hàm là bỏ qua tối đa n trong vùng đệm hoặc khi gặp phím enter (\n)thì kết thúc lệnh cin. cin.ignore(int n, ‘\n’)

  13. Ví dụ #include <iostream.h> #include <conio.h> #include <iomanip.h> #include <stdlib.h> void main() { const int MAX=5; char a[MAX],b[MAX],i; clrscr(); cout <<"nhap mot chuoi"; cin.getline(a,5); //(1) cin.ignore(100,'\n'); cout <<"nhap mot chuoi"; in.getline(b,5); //(2) cout<<a<<” “<<b; getch(); }

  14. Truy xuất từng ký tự trong chuỗi: • Do chuỗi là một mảng ký tự vì vậy ta có thể truy xuất chuỗi bằng chỉ số giống như truy xuất mảng. • Ví dụ: Xây dựng hàm có hai tham số để nhận hai chuổi sau đó copy nội dung chuỗi thứ hai sang chuỗi thứ nhất.

  15. void strcopy(char st1[], char st2[]) { int i=0; while (st2[i] != ‘\0’) { st1[i]=st2[i]; i++; } st1[i]=’\0’; return; }

  16. void main() { const int max=30; char st1[max], st2[max]; int i; cout<<"nhap chuoi thu nhat:"; cin.getline(st2, max); cin.ingore(100,'\n'); strcopy(st1,st2); cout<<"chuoi thu hai la:"<<st2; getch(); }

  17. CON TRỎ và CÁC HÀM TRÊN CHUỖI

  18. Con trỏ và chuỗi • Con trỏ rất hữu ích trong việc xây dựng các hàm xử lý chuỗi. • Khi sử dụng con trỏ để truy xuất chuỗi thay cho chỉ số thì chương trình sẽ cô đọng và hiệu quả hơn. Ví dụ: Hàm strcopy sử dụng con trỏ. void strcopy(char st1[], char st2[]) { while (*st1++ = *st2++); }

  19. Ví dụ: #include <iostream.h> #include <conio.h> #include <string.h> void strcopy(char st1[], char st2[]); void main() { const int MAX=80; char str2[MAX],c,str1[MAX]; int i=0; clrscr(); cout <<"nhap mot chuoi \n"; cin.getline(str2,MAX); cin.ignore(100,'\n'); strcopy(str1,str2); cout<<"\n"<<str1; getch(); } void strcopy(char st1[ ], char st2[ ]) { while (*st1++=*st2++); }

  20. Các hàm thao tác với chuỗi thông dụng

  21. Các hàm thao tác với chuỗi thông dụng

  22. Các hàm thao tác với chuỗi thông dụng

  23. Các hàm thao tác với chuỗi thông dụng

  24. #include <iostream.h> #include <conio.h> #include <string.h> #include <stdlib.h> void main() { const int MAX=80; char str2[MAX],c,str1[MAX]; int n; clrscr(); cout <<"Nhap chuoi thu 1: "; cin.getline(str1,MAX); if (strlen(str1)>=MAX-1) cin.ignore(100,'\n'); cout <<"Nhap chuoi thu 2: "; cin.getline(str2,MAX); n= strcmp(str1,str2);

  25. if (n<0) cout <<str1 <<" nho hon " <<str2<<endl; else if (n= =0) cout <<str1 <<" == " <<str2<<endl; else cout <<str1 <<" lon hon " <<str2<<endl; cout <<"Chieu dai chuoi thu 1 la: "<<strlen(str1)<<endl ; cout<<"Chieu dai chuoi thu 2 la: "<<strlen(str2)<<endl; strcat(str1,str2); //Sau khi noi chieu dai k0 duoc vuot qua pham vi cout<<"Sau khi noi str2 vao str1 \n"<<"chuoi 1 la: "<<str1<<endl; strcpy(str1,str2); cout <<"Sau khi copy noi dung str2 vao str1 \n" cout<<"chuoi 1 la: "<<str1<<endl; getch(); }

  26. Các hàm thao tác trên ký tự trong thư viện ctype.h

  27. Các hàm thao tác trên ký tự trong thư viện ctype.h

  28. Các hàm thao tác trên ký tự trong thư viện ctype.h

  29. Các hàm thao tác trên ký tự trong thư viện ctype.h

  30. Ví dụ #include <iostream.h> #include <conio.h> #include <ctype.h> #include <iomanip.h> void main() { const int MAX=80; int i; clrscr(); for (i=0;i<=255;i++) { if (i%22==0) { getch(); clrscr(); cout <<setw(3)<<"MaKT"<<setw(8)<<"KT ASCII"<<setw(8) <<"KT DK"<<setw(8)<<"KT IN"<<setw(8) <<"KT DAU"<<setw(8)<<"KY TU"<<endl; } cout <<setw(3)<<i<<setw(8)<<isascii(char(i))<<setw(10) <<iscntrl(char(i))<<setw(7)<<isprint(char(i))<<setw(8)<<ispunct(char(i)); if (isprint(char(i))) cout<<setw(7)<<char(i); cout <<endl; } getch(); }

  31. Các hàm chuyển đổi chuỗi trong thư viện stdlib.h:

  32. Các hàm chuyển đổi chuỗi trong thư viện stdlib.h: Ví dụ: #include <iostream.h> #include <conio.h> #include <stdlib.h> #include <ctype.h> int test_int(char*); int test_float(char *st);

  33. void main() { const int MAX=10;char str2[MAX]; int n; double x; cout <<"nhap mot so nguyen \n"; cin.getline(str2,MAX); if (strlen(str2)>=MAX-1) cin.ignore(100,'\n'); if (test_int(str2)) { n=atoi(str2); cout<<'\n'<<n<<endl; } else cout <<"Nhap sai"; cout <<"nhap mot so double \n"; cin.getline(str2,MAX); if (test_float (str2)) { x=atof(str2); cout<<'\n'<<x<<endl; }else cout <<"Nhap sai"; getch(); }

  34. int test_int(char *st) { while (isdigit(*(st))) st++; return !int(*(st)); } int test_float(char *st) { while (isdigit(*(st))|| *(st)=='.' ) st++; return !int(*(st)); }

More Related