Buổi 6: Kiểu dữ liệu mới và xâu
Giảng viên: TS. Lê Hoàng Sơn
lehoangson@hus.edu.vn
1
Lập trình tính toán khoa học kỹ thuật
Nội dung chính
Kiểu Dữ Liệu Mới
1
Xâu
2
Bài tập
3
2/19
Lê Hoàng Sơn
1. Kiểu dữ liệu mới
trong cú pháp của C chuẩn không cung cấp
Sử dụng khi ta muốn định nghĩa một loại dữ liệu mới mà
Ví dụ: danh sách học sinh
typedef kiểu_đã_có tên_kiểu_mới;
Đặt lại tên kiểu dữ liệu đã có bằng câu lệnh: Ví dụ: typedef int songuyen; Có thể định nghĩa thêm kiểu dữ liệu mới thông qua cú
pháp enum và struct.
3/19
Lê Hoàng Sơn
Cú pháp enum (tập hợp)
enum tên_kiểu_dữ_liệu_mới { phần tử 1, …. phần tử k }; Sau khi khai báo, ta có thể sử dụng kiểu dữ liệu mới này
trong chương trình như sau: tên_kiểu_dữ_liệu_mới biến; tên_kiểu_dữ_liệu_mới hàm (đối số) { …. }
4/19
Lê Hoàng Sơn
Ví dụ: Chọn hướng đi
Định nghĩa các hướng
Sử dụng kiểu dữ liệu mới
Gọi hàm
#include
5/19
Lê Hoàng Sơn
Cú pháp struct struct tên_cấu_trúc_mới { KiểuDL_1 thành_phần_1; …. KiểuDL_k thành_phần_k; }; Sau khi khai báo, ta có thể sử dụng kiểu dữ liệu mới này
trong chương trình như sau: tên_cấu_trúc_mới biến; tên_cấu_trúc_mới hàm (đối số) { …. }
6/19
Lê Hoàng Sơn
Truy cập struct
Sau khi khai báo biến, ta có thể truy cập các thành phần
biến. thành_phần_i Nếu biến sử dụng cấu trúc là con trỏ, ta truy cập các thành
của cấu trúc như sau:
Ví dụ: tên_cấu_trúc_mới *biến;
phần thông qua phép toán ->
biến-> thành_phần_i
Ta có thể khai báo một mảng cấu trúc như sau Ví dụ: tên_cấu_trúc_mới biến[100];
7/19
Lê Hoàng Sơn
Ví dụ: danh sách sinh viên
Khai báo một cấu trúc
Sử dụng cấu trúc
Gán giá trị
#include
8/19
Lê Hoàng Sơn
Nội dung chính
Kiểu Dữ Liệu Mới
1
Xâu
2
Bài tập
3
9/19
Lê Hoàng Sơn
2. Xâu – Chuỗi ký tự
kép.
Ví dụ: str = “hello”;
Chuỗi ký tự là một dãy các ký tự đặt trong cặp dấu nháy
Chuỗi rỗng được ký hiệu bằng hai dấu nháy kép đi liền
Ví dụ: str = “”;
nhau.
Khai báo chuỗi ký tự:
char ten_chuoi[] ; char *ten_chuoi;
Một chuỗi ký tự được cấp phát một khoảng nhớ cho một mảng kiểu char chứa các ký tự của chuỗi và chứa thêm ký tự '\0' là ký tự kết thúc chuỗi.
10/19
Lê Hoàng Sơn
Một số hàm trong
Lấy độ dài chuỗi
int strlen(char s[])
Sao chép chuỗi source vào chuỗi dest: strcpy(char dest[], char source[])
Sao chép n ký tự trong chuỗi source vào chuỗi dest
strncpy(char dest[], char source[], int n)
Nối chuỗi ch2 vào cuối chuỗi ch1
strcat(char ch1[], char ch2[]) Nối n ký tự đầu tiên của ch2 vào ch1
strncat(char ch1[], char ch2[],int n)
Tìm lần xuất hiện đầu tiên của ký tự c trong chuỗi s, trả về địa chỉ
của ký tự này
char *strchr(char s[], char c)
11/19
Lê Hoàng Sơn
Một số hàm trong (tiếp)
char *strstr(char s1[], char s2[])
So sánh hai chuỗi ch1 và ch2. Nguyên tắc so sánh theo
Tìm kiếm chuỗi s2 trong chuỗi s1, Trả về địa chỉ của lần xuất hiện đầu tiên của s2 trong s1 hoặc NULL khi không tìm thấy
= 0 nếu chuỗi ch1 bằng chuỗi ch2 > 0 nếu chuỗi ch1 lớn hơn chuỗi ch2 < 0 nếu chuỗi ch1 nhỏ hơn chuỗi ch2 int strcmp(char ch1[], char ch2[])
kiểu từ điển. Giá trị trả về:
12/19
Lê Hoàng Sơn
Đếm số lần xuất hiện của một ký tự trong một xâu
int i = 0,so = 0;
Xóa màn hình
Kiểm tra từng ký tự trong xâu
if (xau[i++]==ch) so++;
#include
13/19
Lê Hoàng Sơn
#include
Ví dụ: minh họa các hàm trong
14/19
Lê Hoàng Sơn
Tóm tắt bài học
Kiểu dữ liệu mới
enum struct Chuỗi ký tự Khai báo Một số hàm quan trọng
15/19
Lê Hoàng Sơn
Câu hỏi thảo luận
16/19
Lê Hoàng Sơn
Nội dung chính
Kiểu Dữ Liệu Mới
1
Xâu
2
Bài tập
3
17/19
Lê Hoàng Sơn
Bài tập
1. Viết chương trình nhập vào 1 chuỗi, in ra kết quả của 10 ký tự đầu tiên. Nếu chuỗi nhập không đủ 10 ký tự, thì có thông báo “ chuỗi có độ dài nhỏ hơn 10” 2. Nhập vào một chuỗi và đếm số lần xuất hiện của các
3. Nhập vào một chuỗi và loại bỏ khoảng trắng trong
ký tự trong chuỗi đó
chuỗi. In ra độ dài của chuỗi cũ và mới.
4. Nhập vào danh sách N sinh viên gồm các thông tin
sau: mã sinh viên, họ tên, ngày tháng năm sinh, điểm phẩy, quê quán, nam/nữ. In ra sinh viên có điểm lớn nhất
5. Sắp xếp danh sách sinh viên trên theo họ tên và in ra
màn hình
18/19
Lê Hoàng Sơn
Lê Hoàng Sơn