SlideShare ist ein Scribd-Unternehmen logo
1 von 41
Con trỏ - Pointer
Con trỏ – Pointer ,[object Object],[object Object],[object Object],[object Object],[object Object]
Con trỏ –  Một số lý do nên sử dụng ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Con trỏ –  Khai báo trong C ,[object Object],[object Object],typedef int   * PINT; // PINT  là kiểu con trỏ - địa chỉ vùng nhớ kiểu int int x; PINT p; //p, p1: biến kiểu  int * int *p1;
Con trỏ –  Khai báo trong C int *pi; long int *p; float* pf; char c, d, *pc; /* c và d kiểu char   pc là con trỏ đến char */ double* pd, e, f; /* pd là con trỏ đến double   e and f are double */ char *start, *end;
Con trỏ -  Toán tử “ & ” ,[object Object],[object Object],0x91A2 0x1132 char g = 'z'; int main() { char c = 'a'; char *p; p = &c; p = &g; return 0; } p c 'a' 0x1132 p g 'z' 0x91A2
[object Object],Con trỏ -  Toán tử “*” #include <stdio.h> char g = 'z'; int main() { char c = 'a'; char *p; p = &c; printf(&quot;%c&quot;, *p); p = &g; printf(&quot;%c&quot;, *p); return 0; } a z xuất giá trị do p đang quản lý 0x91A2 0x1132 p c 'a' 0x1132 p g 'z' 0x91A2
Con trỏ -  Truyền tham số địa chỉ   #include <stdio.h> void  change(int *v); int main() { int var = 5; change(&var); printf(&quot;main: var = %i&quot;, var); return 0; } void change(int *v) { (*v) *= 100; printf(&quot;change: *v = %i&quot;, (*v)); }
Con trỏ NULL ,[object Object],#include <stdio.h> int main() { int i = 13; short *p = NULL; if (p == NULL) printf(“Con trỏ không hợp lệ!&quot;); else printf(“Giá trị : %hi&quot;, *p); return 0; }
Con trỏ -  Toán tử gán “=”   ,[object Object],0x15A0 0x15A4 0x15A0 int i = 10, j = 14; int* p = &i; int *q = &j; *p = *q; int i = 10, j = 14; int *p = &i; int *q = &j; p = q; và: p i 10 0x15A0 14 q j 0x15A4 14 p i 10 0x15A0 q j 0x15A4 0x15A4 14 0x15A4
Luyện tập –  Điền vào ô trống int main(void) { int i = 10, j = 14, k; int *p = &i; int *q = &j; *p += 1; p = &k; *p = *q; p = q; *p = *q; return 0; } i 0x2100 j 0x2104 k 0x1208 p 0x120B q 0x1210
Con trỏ và Mảng ,[object Object],[object Object],#include <stdio.h> int main() { int a[10] = {1, 3, 4, 2, 0}; int *p; p = a;  //a = p: sai printf(“0x%04X %i 0x%04X %i“, ); a, a[0], p, *p); return 0; }
Con trỏ -  Toán tử “+” với số nguyên 3 4 0x15A0 0x15A2 #include <stdio.h> int main() { short a[10] = {1, 3, 5, 2, 0}; short *p = a;  printf(“0x%04X %i 0x%04X %i“, ); a, a[0], p, *p); p ++; printf(“0x%04X %i 0x%04X %i“, ); a, a[0], p, *p); (*p) ++; printf(“0x%04X %i 0x%04X %i“, ); a, a[0], p, *p); return 0; } 1 5 2 0 a … 0x15A0 p 0x16B2
Con trỏ -  Luyện tập #include <stdio.h> int main() { int a[10] = {2, 3, 5, 1, 4, 7, 0}; int *p = a;  printf(“%i %i“, a[0], *p); p ++; printf(“%i %i“, *p, p[2]); p ++; a[2] = 9; printf(“%i %i“, p[1], *p); p -= 2; printf(“%i %i”, p[3], p[1]); return 0; } 2 2 3 1 1 9 1 3
Con trỏ -  Cấp phát vùng nhớ động   ,[object Object],[object Object],#include <stdio.h> int main() { int *p = new int[10]; p[0] = 1; p[3] = -7; delete []p; return 0; }
Tóm lược ,[object Object],[object Object],[object Object],[object Object],[object Object]
Chuỗi ký tự - String
Chuỗi ký tự – Strings ,[object Object],[object Object],[object Object],[object Object]
Chuỗi ký tự -  Một số qui tắc ,[object Object],[object Object],[object Object],char s[100]; unsigned char s1[1000];
Chuỗi ký tự -  Ví dụ char first_name[5] = { 'J', 'o', 'h', 'n', '' }; char last_name[6]  = &quot;Minor&quot;; char other[]  = &quot;Tony Blurt&quot;; char characters[7] = &quot;No null&quot;; first_name last_name other characters 0 'n' 'h' 'o' 'J' 0 'r' 'o' 'n' 'i' 'M' 32 'B' 'l' 'u' 'r' 0 't' 'y' ‘ n’ 'o' 'T' 'l' 'l' 0 'u' 'n' 32 'o' 'N'
[object Object],[object Object],[object Object],Chuỗi ký tự -  Nhập / xuất char name[100];   printf(&quot;Nhap mot chuoi ky tu %s: &quot;); gets(name); char other[] = &quot;Tony Blurt&quot;;   printf(&quot;%s&quot;, other);
Lưu ý: kết thúc chuỗi #include <stdio.h> int main() { char other[] = &quot;Tony Blurt&quot;; printf(&quot;%s&quot;, other); other[4] = ''; printf(&quot;%s&quot;, other); return 0; } Tony Blurt Tony other &quot;Blurt&quot; sẽ không được in ra 32 'B' 'l' 'u' 'r' 0 't' 'y' ‘ n’ 'o' 'T'
Chuỗi ký tự –  Một số hàm thư viện ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Chuỗi ký tự –  Một số hàm thư viện ,[object Object],[object Object],[object Object],[object Object],[object Object]
Chuỗi ký tự –  ví dụ  strcmp #include <stdio.h> int main() { char  s1[] = &quot;Minor&quot;; char  s2[] = &quot;Tony&quot;; int cmp = strcmp(s1, s2); if (cmp < 0) printf(&quot;%s < %s&quot;, s1, s2); else if (cmp == 0) printf(&quot;%s = %s&quot;, s1, s2); else printf(&quot;%s > %s&quot;, s1, s2); return 0; } Minor < Tony
Chuỗi ký tự –  Một số hàm thư viện ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Chuỗi ký tự –  ví dụ  strcpy #include <stdio.h> int main() { char s[] = &quot;Tony Blurt&quot;; char s2[100], *s3; strcpy(s2, s); printf(&quot;%s&quot;, s2); strncpy(s2 + 2, &quot;12345&quot;, 3); printf(&quot;%s&quot;, s2); s3 = strdup(s + 5); printf(&quot;%s&quot;, s3); free(s3); return 0; } Tony Blurt To123Blurt Blurt
Chuỗi ký tự –  Một số hàm thư viện ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Chuỗi ký tự –  ví dụ  strtok #include <stdio.h> #define SEPARATOR &quot;., &quot; int main() { char s[]= &quot;Thu strtok: 9,123.45&quot;; char *p; p = strtok(s, SEPARATOR); while (p != NULL) { printf(&quot;%s&quot;, p); p = strtok(NULL, SEPARATOR); } return 0; } Thu strtok: 9 123 45
Chuỗi ký tự –  Một số hàm thư viện ,[object Object],[object Object],[object Object],[object Object],[object Object]
Chuỗi ký tự –  ví dụ tìm kiếm #include <stdio.h> int main() { char s[]= &quot;Thu tim kiem chuoi&quot;; char *p; p = strchr(s, 'm'); printf(&quot;%s&quot;, p); p = strstr(s, &quot;em&quot;); printf(&quot;%s&quot;, p); return 0; } m kiem chuoi em chuoi
Chuỗi ký tự –  chèn một đoạn ký tự #include <stdio.h> void StrIns(char *s, char *sub) { int  len = strlen(sub); memmove(s + len, s, strlen(s)+1); strncpy(s, sub, len); } int main() { char s[]= &quot;Thu chen&quot;; StrIns(s, &quot;123&quot;);   printf(&quot;%s&quot;, s); StrIns(s + 8, &quot;45&quot;);  printf(&quot;%s&quot;, p); return 0; } 123 Thu chen 123 Thu 45chen
Chuỗi ký tự –  xóa một đoạn ký tự #include <stdio.h> void StrDel(char *s, int n) { memmove(s, s + n, strlen(s+n)+1); } int main() { char s[]= &quot;Thu xoa 12345&quot;; StrDel(s, 4);   printf(&quot;%s&quot;, s); StrDel(s + 4, 3); printf(&quot;%s&quot;, p); return 0; } xoa 12345 xoa 45
Tóm lược ,[object Object],[object Object],[object Object],[object Object],[object Object]
Cấu trúc - Struct
Kiểu cấu trúc ,[object Object],[object Object],[object Object],[object Object],[object Object]
Khái niệm ,[object Object],[object Object]
Cấu trúc –  Khai báo trong C ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Cấu trúc –  ví dụ typedef struct TBook { char title[80]; char author[80]; float price; char isbn[20]; }; typedef struct TDate { char day; char month; int year; }; typedef struct TStudent { char ID[10]; char firstname[10]; char lastname[20]; TDate dob; float marks[10]; }; //khai báo các biến TBook book; TStudent list[100];
[object Object],Cấu trúc –  Truy xuất các thành phần void Print(TStudent m) { printf(&quot;Name : %s %s&quot;,  m.firstname, m.lastname); printf(&quot;Student ID : %s&quot;, m.ID); printf(&quot;Date of birth : %hi/%hi/%i&quot;, m.dob.day, m.dob.month, m.dob.year); printf(&quot;Marks : &quot;); for (int i=0; i<10; i++) printf(&quot;%.2f &quot;, m.marks[i]); }
Cấu trúc –  Truy xuất các thành phần void ReadInfo(TStudent &m) { printf(&quot;Type student ID: &quot;); scanf(&quot;%s&quot;, m.ID); printf(&quot;Type first name: &quot;); gets(m.firstname); printf(&quot;Type last name: &quot;); gets(m.lastname); printf(&quot;Date of birth (d m y): &quot;); scanf(&quot;%hi %hi %i&quot;, &(m.dob.day),  &(m.dob.month), &(m.dob.year)); printf(&quot;Marks (10 floats): &quot;); for (int i=0; i<10; i++) scanf(&quot;%f&quot;, &(m.marks[i])); }

Weitere ähnliche Inhalte

Was ist angesagt?

chuỗi ký tự c++
chuỗi ký tự c++chuỗi ký tự c++
chuỗi ký tự c++ptquang160492
 
Bai giangtrenlop
Bai giangtrenlopBai giangtrenlop
Bai giangtrenlopHồ Lợi
 
Phần 9: Chuỗi ký tự
Phần 9: Chuỗi ký tựPhần 9: Chuỗi ký tự
Phần 9: Chuỗi ký tựHuy Rùa
 
Giao trinh bai tap c va c++
Giao trinh bai tap c va c++Giao trinh bai tap c va c++
Giao trinh bai tap c va c++Congdat Le
 
Thdc3 Lap Trinh C
Thdc3 Lap Trinh CThdc3 Lap Trinh C
Thdc3 Lap Trinh Cquyloc
 
Lap trinh c++ có lời giải 1
Lap trinh c++ có lời giải 1Lap trinh c++ có lời giải 1
Lap trinh c++ có lời giải 1Minh Ngoc Tran
 
Lap trinh c++ có lời giải 3
Lap trinh c++ có lời giải 3Lap trinh c++ có lời giải 3
Lap trinh c++ có lời giải 3Minh Ngoc Tran
 
Phong cach lap trinh c++
Phong cach lap trinh c++Phong cach lap trinh c++
Phong cach lap trinh c++ptquang160492
 
3 Function
3 Function3 Function
3 FunctionCuong
 
LAP TRINH C - SESSION 2
LAP TRINH C - SESSION 2LAP TRINH C - SESSION 2
LAP TRINH C - SESSION 2pnanhvn
 
Code và sơ đồ khối môn Phương pháp số và lập trình Fortran
Code và sơ đồ khối môn Phương pháp số và lập trình FortranCode và sơ đồ khối môn Phương pháp số và lập trình Fortran
Code và sơ đồ khối môn Phương pháp số và lập trình FortranLee Ein
 

Was ist angesagt? (18)

Control structure in C
Control structure in CControl structure in C
Control structure in C
 
chuỗi ký tự c++
chuỗi ký tự c++chuỗi ký tự c++
chuỗi ký tự c++
 
C đến C++ phần 1
C đến C++ phần 1C đến C++ phần 1
C đến C++ phần 1
 
Bai giangtrenlop
Bai giangtrenlopBai giangtrenlop
Bai giangtrenlop
 
Phần 9: Chuỗi ký tự
Phần 9: Chuỗi ký tựPhần 9: Chuỗi ký tự
Phần 9: Chuỗi ký tự
 
Giao trinh bai tap c va c++
Giao trinh bai tap c va c++Giao trinh bai tap c va c++
Giao trinh bai tap c va c++
 
Slide pointer sepro
Slide pointer seproSlide pointer sepro
Slide pointer sepro
 
Pointer vn
Pointer vnPointer vn
Pointer vn
 
Thdc3 Lap Trinh C
Thdc3 Lap Trinh CThdc3 Lap Trinh C
Thdc3 Lap Trinh C
 
Lap trinh c++ có lời giải 1
Lap trinh c++ có lời giải 1Lap trinh c++ có lời giải 1
Lap trinh c++ có lời giải 1
 
Lap trinh c++ có lời giải 3
Lap trinh c++ có lời giải 3Lap trinh c++ có lời giải 3
Lap trinh c++ có lời giải 3
 
Lect09 string
Lect09 stringLect09 string
Lect09 string
 
Phong cach lap trinh c++
Phong cach lap trinh c++Phong cach lap trinh c++
Phong cach lap trinh c++
 
3 Function
3 Function3 Function
3 Function
 
Tut4 solution
Tut4 solutionTut4 solution
Tut4 solution
 
Pointer
PointerPointer
Pointer
 
LAP TRINH C - SESSION 2
LAP TRINH C - SESSION 2LAP TRINH C - SESSION 2
LAP TRINH C - SESSION 2
 
Code và sơ đồ khối môn Phương pháp số và lập trình Fortran
Code và sơ đồ khối môn Phương pháp số và lập trình FortranCode và sơ đồ khối môn Phương pháp số và lập trình Fortran
Code và sơ đồ khối môn Phương pháp số và lập trình Fortran
 

Ähnlich wie 4 Pointer String Struct

Hướng dẫn làm bt về chuỗi.doc
Hướng dẫn làm bt về chuỗi.docHướng dẫn làm bt về chuỗi.doc
Hướng dẫn làm bt về chuỗi.docTrần Văn Nam
 
1 Gioi Thieu Chung
1 Gioi Thieu Chung1 Gioi Thieu Chung
1 Gioi Thieu ChungCuong
 
Lec3. Ham.pdf
Lec3. Ham.pdfLec3. Ham.pdf
Lec3. Ham.pdfKinHongnh
 
Nmlt C03 Cac Kieu Du Lieu Co So
Nmlt C03 Cac Kieu Du Lieu Co SoNmlt C03 Cac Kieu Du Lieu Co So
Nmlt C03 Cac Kieu Du Lieu Co SoCuong
 
Cpl test1%20key
Cpl test1%20keyCpl test1%20key
Cpl test1%20keyHồ Lợi
 
Lap trinh huong_doi_tuong_cpp_dhct_lesson05
Lap trinh huong_doi_tuong_cpp_dhct_lesson05Lap trinh huong_doi_tuong_cpp_dhct_lesson05
Lap trinh huong_doi_tuong_cpp_dhct_lesson05xcode_esvn
 
Nmlt c11 con_trocoban-
Nmlt c11 con_trocoban-Nmlt c11 con_trocoban-
Nmlt c11 con_trocoban-Minh Ngoc Tran
 
C10 generic algorithms
C10 generic algorithmsC10 generic algorithms
C10 generic algorithmsHồ Lợi
 
Nmlt C09 Chuoi Ky Tu
Nmlt C09 Chuoi Ky TuNmlt C09 Chuoi Ky Tu
Nmlt C09 Chuoi Ky TuCuong
 

Ähnlich wie 4 Pointer String Struct (20)

Hướng dẫn làm bt về chuỗi.doc
Hướng dẫn làm bt về chuỗi.docHướng dẫn làm bt về chuỗi.doc
Hướng dẫn làm bt về chuỗi.doc
 
1 Gioi Thieu Chung
1 Gioi Thieu Chung1 Gioi Thieu Chung
1 Gioi Thieu Chung
 
Lec3. Ham.pdf
Lec3. Ham.pdfLec3. Ham.pdf
Lec3. Ham.pdf
 
Nmlt C03 Cac Kieu Du Lieu Co So
Nmlt C03 Cac Kieu Du Lieu Co SoNmlt C03 Cac Kieu Du Lieu Co So
Nmlt C03 Cac Kieu Du Lieu Co So
 
Cpl test1%20key
Cpl test1%20keyCpl test1%20key
Cpl test1%20key
 
Session 06
Session 06Session 06
Session 06
 
Session 06
Session 06Session 06
Session 06
 
Cac ham trong thu vien cua c&c++
Cac ham trong thu vien cua c&c++Cac ham trong thu vien cua c&c++
Cac ham trong thu vien cua c&c++
 
Session 11
Session 11Session 11
Session 11
 
Session 11
Session 11Session 11
Session 11
 
Lap trinh huong_doi_tuong_cpp_dhct_lesson05
Lap trinh huong_doi_tuong_cpp_dhct_lesson05Lap trinh huong_doi_tuong_cpp_dhct_lesson05
Lap trinh huong_doi_tuong_cpp_dhct_lesson05
 
Lesson08
Lesson08Lesson08
Lesson08
 
Session 13
Session 13Session 13
Session 13
 
Session 13
Session 13Session 13
Session 13
 
Nmlt c11 con_trocoban
Nmlt c11 con_trocobanNmlt c11 con_trocoban
Nmlt c11 con_trocoban
 
Nmlt c11 con_trocoban-
Nmlt c11 con_trocoban-Nmlt c11 con_trocoban-
Nmlt c11 con_trocoban-
 
C10 generic algorithms
C10 generic algorithmsC10 generic algorithms
C10 generic algorithms
 
C10 generic algorithms
C10 generic algorithmsC10 generic algorithms
C10 generic algorithms
 
Nmlt C09 Chuoi Ky Tu
Nmlt C09 Chuoi Ky TuNmlt C09 Chuoi Ky Tu
Nmlt C09 Chuoi Ky Tu
 
Stl string
Stl stringStl string
Stl string
 

Mehr von Cuong

3 Function
3 Function3 Function
3 FunctionCuong
 
Nmlt C08 Mang2 Chieu
Nmlt C08 Mang2 ChieuNmlt C08 Mang2 Chieu
Nmlt C08 Mang2 ChieuCuong
 
Nmlt C07 Mang1 Chieu
Nmlt C07 Mang1 ChieuNmlt C07 Mang1 Chieu
Nmlt C07 Mang1 ChieuCuong
 
Nmlt C06 Ham
Nmlt C06 HamNmlt C06 Ham
Nmlt C06 HamCuong
 
Nmlt C05 Cau Lenh Lap
Nmlt C05 Cau Lenh LapNmlt C05 Cau Lenh Lap
Nmlt C05 Cau Lenh LapCuong
 
Nmlt C04 Cau Lenh Dieu Kien Va Re Nhanh
Nmlt C04 Cau Lenh Dieu Kien Va Re NhanhNmlt C04 Cau Lenh Dieu Kien Va Re Nhanh
Nmlt C04 Cau Lenh Dieu Kien Va Re NhanhCuong
 
Nmlt C02 GioiThieuNNLTC
Nmlt C02 GioiThieuNNLTCNmlt C02 GioiThieuNNLTC
Nmlt C02 GioiThieuNNLTCCuong
 
Nmlt C01 Cac Khai Niem Co Ban Ve Lap Trinh
Nmlt C01 Cac Khai Niem Co Ban Ve Lap TrinhNmlt C01 Cac Khai Niem Co Ban Ve Lap Trinh
Nmlt C01 Cac Khai Niem Co Ban Ve Lap TrinhCuong
 
5 Array
5 Array5 Array
5 ArrayCuong
 
2 Cau Truc Dieu Khien
2 Cau Truc Dieu Khien2 Cau Truc Dieu Khien
2 Cau Truc Dieu KhienCuong
 

Mehr von Cuong (10)

3 Function
3 Function3 Function
3 Function
 
Nmlt C08 Mang2 Chieu
Nmlt C08 Mang2 ChieuNmlt C08 Mang2 Chieu
Nmlt C08 Mang2 Chieu
 
Nmlt C07 Mang1 Chieu
Nmlt C07 Mang1 ChieuNmlt C07 Mang1 Chieu
Nmlt C07 Mang1 Chieu
 
Nmlt C06 Ham
Nmlt C06 HamNmlt C06 Ham
Nmlt C06 Ham
 
Nmlt C05 Cau Lenh Lap
Nmlt C05 Cau Lenh LapNmlt C05 Cau Lenh Lap
Nmlt C05 Cau Lenh Lap
 
Nmlt C04 Cau Lenh Dieu Kien Va Re Nhanh
Nmlt C04 Cau Lenh Dieu Kien Va Re NhanhNmlt C04 Cau Lenh Dieu Kien Va Re Nhanh
Nmlt C04 Cau Lenh Dieu Kien Va Re Nhanh
 
Nmlt C02 GioiThieuNNLTC
Nmlt C02 GioiThieuNNLTCNmlt C02 GioiThieuNNLTC
Nmlt C02 GioiThieuNNLTC
 
Nmlt C01 Cac Khai Niem Co Ban Ve Lap Trinh
Nmlt C01 Cac Khai Niem Co Ban Ve Lap TrinhNmlt C01 Cac Khai Niem Co Ban Ve Lap Trinh
Nmlt C01 Cac Khai Niem Co Ban Ve Lap Trinh
 
5 Array
5 Array5 Array
5 Array
 
2 Cau Truc Dieu Khien
2 Cau Truc Dieu Khien2 Cau Truc Dieu Khien
2 Cau Truc Dieu Khien
 

4 Pointer String Struct

  • 1. Con trỏ - Pointer
  • 2.
  • 3.
  • 4.
  • 5. Con trỏ – Khai báo trong C int *pi; long int *p; float* pf; char c, d, *pc; /* c và d kiểu char pc là con trỏ đến char */ double* pd, e, f; /* pd là con trỏ đến double e and f are double */ char *start, *end;
  • 6.
  • 7.
  • 8. Con trỏ - Truyền tham số địa chỉ #include <stdio.h> void change(int *v); int main() { int var = 5; change(&var); printf(&quot;main: var = %i&quot;, var); return 0; } void change(int *v) { (*v) *= 100; printf(&quot;change: *v = %i&quot;, (*v)); }
  • 9.
  • 10.
  • 11. Luyện tập – Điền vào ô trống int main(void) { int i = 10, j = 14, k; int *p = &i; int *q = &j; *p += 1; p = &k; *p = *q; p = q; *p = *q; return 0; } i 0x2100 j 0x2104 k 0x1208 p 0x120B q 0x1210
  • 12.
  • 13. Con trỏ - Toán tử “+” với số nguyên 3 4 0x15A0 0x15A2 #include <stdio.h> int main() { short a[10] = {1, 3, 5, 2, 0}; short *p = a; printf(“0x%04X %i 0x%04X %i“, ); a, a[0], p, *p); p ++; printf(“0x%04X %i 0x%04X %i“, ); a, a[0], p, *p); (*p) ++; printf(“0x%04X %i 0x%04X %i“, ); a, a[0], p, *p); return 0; } 1 5 2 0 a … 0x15A0 p 0x16B2
  • 14. Con trỏ - Luyện tập #include <stdio.h> int main() { int a[10] = {2, 3, 5, 1, 4, 7, 0}; int *p = a; printf(“%i %i“, a[0], *p); p ++; printf(“%i %i“, *p, p[2]); p ++; a[2] = 9; printf(“%i %i“, p[1], *p); p -= 2; printf(“%i %i”, p[3], p[1]); return 0; } 2 2 3 1 1 9 1 3
  • 15.
  • 16.
  • 17. Chuỗi ký tự - String
  • 18.
  • 19.
  • 20. Chuỗi ký tự - Ví dụ char first_name[5] = { 'J', 'o', 'h', 'n', '' }; char last_name[6] = &quot;Minor&quot;; char other[] = &quot;Tony Blurt&quot;; char characters[7] = &quot;No null&quot;; first_name last_name other characters 0 'n' 'h' 'o' 'J' 0 'r' 'o' 'n' 'i' 'M' 32 'B' 'l' 'u' 'r' 0 't' 'y' ‘ n’ 'o' 'T' 'l' 'l' 0 'u' 'n' 32 'o' 'N'
  • 21.
  • 22. Lưu ý: kết thúc chuỗi #include <stdio.h> int main() { char other[] = &quot;Tony Blurt&quot;; printf(&quot;%s&quot;, other); other[4] = ''; printf(&quot;%s&quot;, other); return 0; } Tony Blurt Tony other &quot;Blurt&quot; sẽ không được in ra 32 'B' 'l' 'u' 'r' 0 't' 'y' ‘ n’ 'o' 'T'
  • 23.
  • 24.
  • 25. Chuỗi ký tự – ví dụ strcmp #include <stdio.h> int main() { char s1[] = &quot;Minor&quot;; char s2[] = &quot;Tony&quot;; int cmp = strcmp(s1, s2); if (cmp < 0) printf(&quot;%s < %s&quot;, s1, s2); else if (cmp == 0) printf(&quot;%s = %s&quot;, s1, s2); else printf(&quot;%s > %s&quot;, s1, s2); return 0; } Minor < Tony
  • 26.
  • 27. Chuỗi ký tự – ví dụ strcpy #include <stdio.h> int main() { char s[] = &quot;Tony Blurt&quot;; char s2[100], *s3; strcpy(s2, s); printf(&quot;%s&quot;, s2); strncpy(s2 + 2, &quot;12345&quot;, 3); printf(&quot;%s&quot;, s2); s3 = strdup(s + 5); printf(&quot;%s&quot;, s3); free(s3); return 0; } Tony Blurt To123Blurt Blurt
  • 28.
  • 29. Chuỗi ký tự – ví dụ strtok #include <stdio.h> #define SEPARATOR &quot;., &quot; int main() { char s[]= &quot;Thu strtok: 9,123.45&quot;; char *p; p = strtok(s, SEPARATOR); while (p != NULL) { printf(&quot;%s&quot;, p); p = strtok(NULL, SEPARATOR); } return 0; } Thu strtok: 9 123 45
  • 30.
  • 31. Chuỗi ký tự – ví dụ tìm kiếm #include <stdio.h> int main() { char s[]= &quot;Thu tim kiem chuoi&quot;; char *p; p = strchr(s, 'm'); printf(&quot;%s&quot;, p); p = strstr(s, &quot;em&quot;); printf(&quot;%s&quot;, p); return 0; } m kiem chuoi em chuoi
  • 32. Chuỗi ký tự – chèn một đoạn ký tự #include <stdio.h> void StrIns(char *s, char *sub) { int len = strlen(sub); memmove(s + len, s, strlen(s)+1); strncpy(s, sub, len); } int main() { char s[]= &quot;Thu chen&quot;; StrIns(s, &quot;123&quot;); printf(&quot;%s&quot;, s); StrIns(s + 8, &quot;45&quot;); printf(&quot;%s&quot;, p); return 0; } 123 Thu chen 123 Thu 45chen
  • 33. Chuỗi ký tự – xóa một đoạn ký tự #include <stdio.h> void StrDel(char *s, int n) { memmove(s, s + n, strlen(s+n)+1); } int main() { char s[]= &quot;Thu xoa 12345&quot;; StrDel(s, 4); printf(&quot;%s&quot;, s); StrDel(s + 4, 3); printf(&quot;%s&quot;, p); return 0; } xoa 12345 xoa 45
  • 34.
  • 35. Cấu trúc - Struct
  • 36.
  • 37.
  • 38.
  • 39. Cấu trúc – ví dụ typedef struct TBook { char title[80]; char author[80]; float price; char isbn[20]; }; typedef struct TDate { char day; char month; int year; }; typedef struct TStudent { char ID[10]; char firstname[10]; char lastname[20]; TDate dob; float marks[10]; }; //khai báo các biến TBook book; TStudent list[100];
  • 40.
  • 41. Cấu trúc – Truy xuất các thành phần void ReadInfo(TStudent &m) { printf(&quot;Type student ID: &quot;); scanf(&quot;%s&quot;, m.ID); printf(&quot;Type first name: &quot;); gets(m.firstname); printf(&quot;Type last name: &quot;); gets(m.lastname); printf(&quot;Date of birth (d m y): &quot;); scanf(&quot;%hi %hi %i&quot;, &(m.dob.day), &(m.dob.month), &(m.dob.year)); printf(&quot;Marks (10 floats): &quot;); for (int i=0; i<10; i++) scanf(&quot;%f&quot;, &(m.marks[i])); }