intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Bài giảng Kỹ thuật lập trình: Chuỗi ký tự - Trịnh Tấn Đạt

Chia sẻ: Minh Vũ | Ngày: | Loại File: PDF | Số trang:62

66
lượt xem
2
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Bài giảng "Kỹ thuật lập trình: Chuỗi ký tự" cung cấp cho người học các kiến thức: Khái niệm chuỗi ký tự (string), chuỗi ký tự trong C, nhập/xuất chuỗi ký tự, con trỏ và chuỗi ký tự,...Cuối bài giảng có phần bài tập để người học ôn tập và củng cố kiến thức.

Chủ đề:
Lưu

Nội dung Text: Bài giảng Kỹ thuật lập trình: Chuỗi ký tự - Trịnh Tấn Đạt

  1. Chuỗi Ký Tự (String) Trịnh Tấn Đạt Khoa CNTT - Đại Học Sài Gòn Email: trinhtandat@sgu.edu.vn Website: https://sites.google.com/site/ttdat88/
  2. Nội dung ▪ Khái niệm chuỗi ký tự (string) ▪ Chuỗi ký tự trong C o Khai báo o Nhập/xuất chuỗi ký tự o Con trỏ và chuỗi ký tự o Các thao tác trên chuỗi ký tự o String và FILE o Ví dụ ▪ Câu hỏi và Bài Tập ▪ Chuỗi ký tự trong C++ (option)
  3. Ký tự (character) ▪ Kiểu char: o Ký tự “in được” gồm: 26 chữ thường (a..z), 26 chữ hoa (A..Z), 10 chữ số (0..9), khoảng trắng, các ký tự: ! “ # $ % & ‘ ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ { | } ~ o Các ký tự “không in được”: tab, lert (bell), newline, … ▪ Các ký tự “in được” đặc biệt: ‘\\’, ‘\’’, ‘\”’ ▪ Các ký tự “không in được” đặc biệt: \n new line \a bell \0 null character \b backspace \t horizontal tab
  4. Ký tự (character) ▪ Nhập xuất ký tự Trong C : char ch; scanf("%c", &ch); printf("ky tu la : %c", ch); Trong C++ : char c; cin>> c; cout
  5. Chuỗi ky tự trong C ▪ Chuỗi ký tự là mảng một chiều, có mỗi thành phần là một ký tự (hoặc có thể xem là số nguyên), được kết thúc bởi ký tự đặc biệt \0 ▪ Ký tự kết thúc (\0) ở cuối chuỗi ký tự thường được gọi là ký tự null (không giống con trỏ NULL). ▪ Được khai báo và truyền tham số như mảng một chiều • Lưu ý: - Ký tự đặt trong dấu nháy đơn Ví dụ: char s[100]; // chuỗi s chứa tối đa 100 ký tự - Chuỗi ký tự đặt trong dấu nháy kép char first_name[5] = { 'J', 'o', 'h', 'n', '\0' }; Ví dụ: In ra màn hình chuỗi other: char last_name[6] = "Minor"; Dùng C: printf("%s",other); char other[] = "Tony Blurt"; Dùng C++: cout
  6. Chuỗi ky tự trong C ❖ Nhập/ xuât chuỗi ký tự ▪ Có thể dùng scanf() hoặc cin>> để nhập chuỗi ký tự (không bao gồm khoảng trắng) o toán tử >> với cin để nhập một chuỗi ký tự đến khi gặp một khoảng trống thì dừng. ▪ Ví dụ: #pragma warning(disable:4996) #include Nhập chuỗi có khoảng trắng, nếu không dùng fflush(stdin) #include → kết quả là gi? #include using namespace std; int main() { char s[100], t[100]; cout
  7. Chuỗi ký tự trong C ❖ Nhập/ xuât chuỗi ký tự ▪ Nhập chuỗi có khoảng trắng dùng hàm gets() ▪ Lưu ý không thể dùng hàm gets() trong visual studio version 15 trở đi. Trước khi ra đời chuẩn C++11, chúng ta thường sử dụng hàm gets để nhập dữ liệu cho mảng kí tự. Nhưng Visual studio 2015 áp dụng chuẩn C++11 trở lên, nên hàm gets() bây giờ đổi tên thành gets_s(). #include ▪ Ví dụ: #include #include using namespace std; int main() { char name[100]; cout
  8. String ▪ Có thể dùng hàm puts() để in chuỗi ký tự ra màn hình Ví dụ: #include #include #include using namespace std; int main() { char A[255],B[255]; cout
  9. String ▪ Lưu ý: kết thúc chuỗi #include #include #include using namespace std; int main() { char other[] = "Tony Blurt"; cout
  10. String trong C ❖ Lưu ý : Lỗi khi tạo một chuỗi ▪ Đối với chuỗi ký tự trong C . Chú ý: không có phép gán trong kiểu dữ liệu chuỗi như thế này là sai char ten[10]; ten = “hoahong”; ▪ Đối với chuỗi ký tự trong C . Không : sử dụng toán tử gán = để chép nội dung của một chuỗi sang chuỗi khác. char a[4]=“hi”; char b[4]; b = a; //??? ▪ Đối với chuỗi ký tự trong C . Không: dùng toán tử ==, , = để so sánh nội dung hai chuỗi char a[] = “hi”; char b[] = “there”; if(a==b) //??? {} * Khắc phục: sử dụng các hàm trong thư viện
  11. Con trỏ và String ❖ Khai báo chuỗi ký tự như một con trỏ : char *p; ▪ Cấp phát động cho con trỏ: p = new char [30]; ▪ Xin cấp phát số lượng ký tự, giống mảng các ký tự #include #include #include using namespace std; int main() { char *p = new char[50]; cout
  12. Con trỏ và String ❑ Lưu ý : ▪ Với một chuỗi ký tự char *s, cú pháp s+k sẽ trả về chuỗi tính từ ký tự thứ k trở về cuối chuỗi s. 'T' 'o' 'n' 'y' 32 'B' 'l' 'u' 'r' 't' '\0' s s+3 // k =3 ▪ Với một chuỗi ký tự char *s, cú pháp s[k]= '\0' sẽ trả về chuỗi s trong đó s kết thúc tại vị trí k. 'T' 'o' 'n' '\0' 32 'B' 'l' 'u' 'r' 't' '\0' s[3]= '\0‘ Khi đó: s là “Ton”
  13. Con trỏ và String ▪ Xét ví dụ khởi tạo bằng một hằng chuỗi kí tự như sau: char s[] = "Lap Trinh"; s[1] = 'A'; //=> "LAp Trinh“ ▪ Chuỗi kí tự "Lap Trinh" được xem như là một chuỗi hằng kí tự, nó có địa chỉ cụ thể trên bộ nhớ ảo, nó được lưu trên bộ nhớ ảo. ▪ Khi sử dụng chuỗi hằng kí tự "Lap Trinh" để khởi tạo cho mảng s, mảng s không được khai báo là kiểu chuỗi hằng kí tự (const char []) nên các kí tự trong mảng s hoàn toàn có thể bị thay đổi. ▪ Điều này chứng tỏ mảng s được cấp phát bộ nhớ tại địa chỉ khác chuỗi hằng kí tự "Lap Trinh“, việc khởi tạo mảng kí tự bằng một chuỗi hằng kí tự chỉ đơn giản là copy từng kí tự của chuỗi "Lap Trinh" và đưa vào mảng. ▪ Do đó, con trỏ kiểu char (char *) trỏ đến mảng s và trỏ đến vùng nhớ của chuỗi hằng kí tự "Lap Trinh" là 2 trường hợp khác nhau. char s[] = "Lap Trinh"; cout
  14. Con trỏ và String ▪ Câu hỏi: cho biết kết quả in ra màn hình char ch = 'A'; Vì &ch trả về dữ liệu kiểu (char *) nên đối tượng cout xem nó cout
  15. Mảng các chuỗi ▪ Dùng con trỏ cấp 2 để biểu diễn mảng các chuỗi ký tự ▪ Ví dụ char *sports[ ] = {“golf”, “hockey”, “football”, “cricket”, ”shooting”}; Hay: char **sports;
  16. Mảng các chuỗi ▪ Ví dụ: nhập vào 3 chuỗi và in ra màn hình dùng array of strings (pointers) #include #include Có thể dùng cấp phát tỉnh: #include char s[100][1024]; using namespace std; int main() { char **s; // array of strings, cấp phát động // in cac chuoi ra man hinh s = new char*[3]; for(int i=0;i
  17. Các hàm xử lý chuỗi trong C ▪ Các hàm xử lý chuỗi thông dụng: trong thư viện strlen(); toupper(); strupr(); strlwr(); strcpy(); strncpy(); strchr(); strstr(); stricmp(); memset(); atoi(); atof(); atol() https://beta.wikiversity.org/wiki/Chu%E1%BB%97i_k%C3%BD_t%E1%BB%B1_trong_C https://v1study.com/c-ham-xu-ly-chuoi-string-a56.html https://oktot.net/huong-dan-su-dung-cac-ham-xu-ly-chuoi-trong-c/ http://cunglaptrinh.blogspot.com/2015/01/cac-ham-xu-ly-chuoi-trong-C.html
  18. Các hàm xử lý chuỗi trong C ▪ Lấy độ dài chuỗi: strlen ▪ Độ dài của chuỗi kí tự được tính từ kí tự đầu tiên cho đến kí tự kết thúc chuỗi ( không đếm ký tự '\0') size_t strlen ( const char * str ); Ví dụ: #include #include #include using namespace std; int main() { char s[20] = "ABC def"; cout
  19. String ▪ Đổi một ký tự thường thành ký tự hoa - Hàm toupper Cú pháp: char toupper(char c) ▪ Đổi toàn bộ các ký tự của chuỗi thành IN HOA : strupr Cú pháp: char* strupr(char *s) ▪ Đổi toàn bộ các ký tự của chuỗi thành in thường: strlwr Cú pháp: char *strlwr(char *s) #include #include #include using namespace std; int main() { char s[20] = "lap TrinH C"; char c ='a'; cout
  20. String ▪ Gán/sao chép nội dung chuỗi: o Chép toàn bộ chuỗi source sang chuỗi destination: strcpy Cú pháp: char* strcpy(char *Des, const char *Source) Lưu ý: Mảng kí tự destination phải được cấp phát đủ bộ nhớ để lưu trữ chuỗi kí tự được copy từ mảng kí tự source. o Chép tối đa n ký tự đầu tiên từ source sang dest: strncpy Cú pháp: char * strncpy(char *Des, const char *Source, size_t n) Lưu ý: Visual studio áp dụng chuẩn C++11 trở lên, nên chúng ta cần sử dụng hàm strncpy_s thay thế cho 2 hàm copy mảng kí tự trong thư viện cstring (string.h)
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2