1. Trang chủ
  2. » Thể loại khác

BaiGiang c++ ppsx

51 1,1K 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Chương 4: Chuỗi
Tác giả ThS. Đỗ Đình Trang
Trường học Đại Học Công Nghệ Thông Tin và Truyền Thông
Chuyên ngành Kỹ thuật lập trình
Thể loại bài giảng
Năm xuất bản 2023
Thành phố Hà Nội
Định dạng
Số trang 51
Dung lượng 193,78 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

 Các chuỗi trong C được cài đặt như là các mảng ký tự kết thúc bởi ký tự NULL ‘\0’ Các biến và hằng kiểu chuỗi:  Các biến chuỗi được sử dụng để lưu trữ một chuỗi các ký tự và phải đượ

Trang 1

ThS Đỗ Đình Trang

KỸ THUẬT LẬP TRÌNH

dodinhtrang@gmail.com

Trang 2

ThS Đỗ Đình Trang

CHƯƠNG 4 : CHUỖI

Trang 3

 Các chuỗi trong C được cài đặt như là các mảng ký tự kết thúc bởi ký tự NULL (‘\0’)

 Các biến và hằng kiểu chuỗi:

Các biến chuỗi được sử dụng để lưu trữ một chuỗi các ký tự và phải được khai báo trước khi sử

dụng

 Mỗi ký tự trong một chuỗi được lưu trữ như là một phần tử của mảng

Trang 4

 Có thể gán giá trị cho chuỗi ký tự bằng những cách sau:

 char arr_str[7] = {`H', `e', `l', `l', `o', `!', `\0'};

 char str[7] = "Hello!";

 char str[] = "I like C.";

 char *ptr_str = "I teach myself C.";

Trang 5

 char *ptr_str;

 ptr_str = "A character string.";

Khai báo chuỗi (tt)

ptr_str = `x'; /* Sai */

*ptr_str = `x'; /* Đúng */

Trang 6

 Các thao tác nhập/xuất (I/O) chuỗi trong C được thực hiện bằng cách gọi các hàm

Các hàm này là một phần của thư viện nhập/xuất chuẩn tên stdio.h

str là một mảng ký tự đã được khai báo

Trang 7

int i=0, delt = `a' - `A';

}

Trang 8

 Các thao tác Nhập/Xuất chuỗi có định dạng

Trang 9

 Các hàm này có thể tìm thấy trong tập tin string.h

 strlen(char *str): Xác định chiều dài của chuỗi str

 char str1[] = {`A', ` `,`s', `t', `r', `i', `n', `g', ` `,`c', `o', `n', `s', `t', `a', `n', `t', `\0'};

 char str2[] = "Another string constant";

 char *ptr_str = "Assign a string to a pointer.";

 printf(“str1 is: %d bytes\n", strlen(str1)); // 17

 printf(“str2 is: %d bytes\n", strlen(str2)); // 23

 printf(“ptr_str is: %d bytes\n",strlen(ptr_str)); // 29

Trang 10

 chr là một biến ký tự chứa giá trị cần tìm.

Hàm trả về con trỏ trỏ đến giá trị tìm được đầu tiên trong chuỗi, hoặc NULL nếu không tìm gặp thấy

Các hàm về chuỗi (tt)

Trang 13

{ char name1[15] = "Geena";

char name2[15] = "Dorothy";

char name3[15] = "Shania";

char name4[15] = "Geena";

int i;

clrscr();

i = strcmp(name1,name2);

printf("%s compared with %s returned

%d\n", name1, name2, i);

Trang 14

str1 và str2 là hai chuỗi đã được khai báo và khởi tạo.

Hàm sao chép giá trị str2 vào str1 và trả về chuỗi str1

 Nối 2 chuỗi vào nhau: strcat()

str1 và str2 là hai chuỗi đã được khai báo và khởi tạo.

Hàm này sẽ thực hiện nối chuỗi str2 vào sau chuỗi str1

Các hàm về chuỗi (tt)

Trang 15

{ char hotelname1[15] = "Sea View";

char hotelname2[15] = "Sea Breeze";

Trang 16

}

Các hàm về chuỗi – Ví dụ về strcat()

Trang 17

ThS Đỗ Đình Trang

CHƯƠNG 5: Tập tin

dodinhtrang@gmail.com

Trang 18

 Kiểu văn bản (text file)

 Kiểu nhị phân (binary file)

Trang 20

filename là con trỏ trỏ đến chuỗi ký tự chứa một tên tập tin hợp lệ và cũng có thể chứa cả phần mô tả đường dẫn

mode xác định cách thức tập tin được mở

Chế độ Ý nghĩa

r Mở một tập tin văn bản để đọc

w Tạo một tập tin văn bản để ghi

a Nối vào một tập tin văn bản

Trang 22

fclose() trả về 0 nếu đóng thành công

 Bất kỳ giá trị trả về nào khác 0 đều cho thấy có lỗi xảy ra

trả về EOF nếu thất bại

Các tập tin văn bản (tt)

Trang 23

char filename[]= "haisu.txt";

int reval = SUCCESS;

printf("The value of fptr: 0x

%p\n", fptr);

printf("Ready to close the file.");

fclose(fptr);

}return reval;

Trang 24

fp là một con trỏ tập tin trả về bởi hàm fopen()

ch là ký tự cần ghi

ch được khai báo là kiểu int, nhưng nó được hàm fputc() chuyển đổi thành kiểu unsigned char.

tập tin và sau đó tăng con trỏ này lên.

Các tập tin văn bản (tt)

Trang 25

fp là một con trỏ tập tin kiểu FILE trả về bởi hàm fopen().

bên trong tập tin lên

Các tập tin văn bản (tt)

Trang 26

 Chương trình sau đây nhận các ký tự từ bàn phím và ghi chúng vào một tập tin cho đến khi người dùng

nhập ký tự ‘@’ Sau khi người dùng nhập thông tin vào, chương trình sẽ hiển thị nội dung ra màn hình

Các tập tin văn bản (tt)

Trang 27

}

do {

ch = fgetc (fp);

putchar(ch) ; } while (ch!=EOF);

getch();

fclose(fp);

}

Các tập tin văn bản (tt)

Trang 28

 Viết toàn bộ chuỗi vào stream.

 Trả về EOF nếu xảy ra lỗi

 Đọc một chuỗi từ stream đã cho cho đến khi đọc được một ký tự sang dòng mới hoặc sau khi đã đọc được

length-1 ký tự

 Hàm trả về một con trỏ trỏ đến chuỗi nếu thành công và NULL nếu xảy ra lỗi.

Các tập tin văn bản (tt)

Trang 29

wb Tạo một tập tin nhị phân để ghi

ab Nối vào một tập tin nhị phân r+b Mở một tập tin nhị phân để đọc/ghi w+b Tạo một tập tin nhị phân để đọc/ghi a+b Nối vào một tập tin nhị phân để đọc/ghi

Trang 30

fp là một con trỏ tập tin trỏ đến một tập tin đang mở

size_t: được dùng như một số nguyên dương

buffer: là một con trỏ trỏ đến thông tin sẽ được ghi vào tập tin

num_bytes: số byte phải đọc hoặc ghi

Các tập tin nhị phân (tt)

Trang 31

count: xác định có bao nhiêu mục (mỗi mục dài num_bytes) được đọc hoặc ghi.

fp: là một con trỏ tập tin trỏ đến một stream đã được mở trước đó Các tập tin mở cho những thao tác này

phải mở ở chế độ nhị phân

này nhỏ hơn count thì đã xảy ra lỗi.

Các tập tin nhị phân (tt)

Trang 32

 buffer: là con trỏ trỏ đến vùng nhớ sẽ nhận dữ liệu từ tập tin.

num_bytes: Số byte phải đọc hoặc ghi.

count: xác định có bao nhiêu mục (mỗi mục dài num_bytes) được đọc hoặc ghi.

fp là một con trỏ tập tin trỏ đến một stream đã được mở trước đó Các tập tin đã mở cho những thao tác này

phải mở ở chế độ nhị phân.

Các tập tin nhị phân (tt)

Trang 33

cuối tập tin hoặc xảy ra lỗi Hàm feof() và hàm ferror() có thể được dùng để xác định nguyên nhân

Các hàm fread() và fwrite() thường được gọi là các hàm đọc hoặc ghi không định dạng

 Chương trình sau đây ghi vào và sau đó đọc ngược ra một số kiểu double, một số kiểu int và

một số kiểu long từ tập tin trên đĩa Lưu ý rằng nó sử dụng hàm sizeof() để xác định độ dài

của mỗi kiểu dữ liệu

Các tập tin nhị phân (tt)

Trang 34

fwrite (&d, sizeof(double), 1, fp);

fwrite (&i, sizeof(int), 1, fp);

fwrite (&li, sizeof(long), 1,fp);

if ((fp = fopen ("jak", "rb+")) ==

NULL ){

printf("Cannot open file");exit(1);

}fread (&d, sizeof(double), 1, fp);fread(&i, sizeof(int), 1, fp);

fread (&li, sizeof(long), 1, fp);printf ("%f %d %ld", d, i, li);fclose (fp);

Các tập tin nhị phân – Ví dụ

Trang 35

đệm nhập của nó sẽ trống, trong khi một tập tin được mở để ghi thì vùng đệm xuất của nó được ghi vào tập tin.

Hệ thống nhập xuất có vùng đệm cũng bao gồm hai hàm fprintf() và fscanf(), hai hàm này

tương tự như hàm printf() và scanf(), ngoại trừ chúng thao tác trên tập tin

Trang 36

 Viết một chương trình để nhập dữ liệu vào một tập tin và in nó theo thứ tự ngược lại.

 Viết một chương trình để truyền dữ liệu từ một tập tin này sang một tập tin khác, loại bỏ tất

cả các nguyên âm (a, e, i, o, u) Loại bỏ các nguyên âm ở dạng chữ hoa lẫn chữ thường Hiển thị nội dung của tập tin mới

Thiết lập một tập tin văn bản chứa các số nguyên từ 1 đến 1000, đọc lại tập tin và chọn ra các

số nguyên tố vào một tập tin khác

Trang 37

 Tạo một tập tin văn bản chứa n * n số thực, đọc và in ra theo dạng ma trận vuông (giả sử số

n không cho trước)

m thì kết thúc lặp.

mỗi hàng d gán trở lại bằng 0)

BÀI TẬP

Trang 38

ThS Đỗ Đình Trang

CHƯƠNG 6 : KIỂU CẤU TRÚC VÀ KIỂU HỢP

Trang 39

 Là kiểu dữ liệu khai báo các hằng integer có định danh.

 enum tag_name {enumeration_list} variable_list;

 tag_name và variable_list là không bắt buộc.

 enum automobile {sedan, pick_up, sport_utility};

 enum language {human=100, animal=50, computer};

 enum days{SUN, MON, TUE, WED, THU, FRI, SAT};

Kiểu dữ liệu enum

Trang 40

{ enum units{penny = 1, nickel = 5,

dime = 10, quarter = 25, dollar = 100};

int money_units[5] = {dollar, quarter, dime, nickel, penny};

char *unit_name[5] = { “dollar(s)”,

“quarter(s)”, “dime(s)”, “nickel(s)”,

printf("\n");

Trang 41

 TWO_BYTE i, j;

Trang 42

typedef char BIT8;

typedef int BIT16;

void Convert2Upper(PTR_STR str1,

PTR_STR str2){

BIT16 i;

for (i=0; str1[i]; i++){

if ((str1[i] >= `a') &&(str1[i] <= `z'))

str2[i] = str1[i] - DELT;

else

str2[i] = str1[i];

}str2[i] = `\0';

Trang 43

for (i=0; i<ITEM_NUM; i++){

str[i] = malloc((strlen(moon[i])+1) * sizeof(BIT8));

for (i=0; i<ITEM_NUM; i++){

printf("\n%s", str[i]); free (str[i]);

} return term;

}

Ví dụ về kiểu typedef (tt)

Whatever we wear

we become beautiful moon viewing!

WHATEVER WE WEAR

WE BECOME BEAUTIFUL MOON VIEWING!

Trang 44

 Là một kiểu dữ liệu bao gồm nhiều thành phần có thể thuộc nhiều kiểu dữ liệu khác nhau

 Các thành phần được truy nhập thông qua tên

struct struct_tag { data_type1 variable1;

Trang 45

char hoten[20];float diem;} hs, dshs[100];

Kiểu cấu trúc (tt)

Trang 47

 Tham chiếu các phần tử cấu trúc

Trang 48

 1,

 “B Smith”

};

}

Trang 49

 Là khối bộ nhớ dùng lưu trữ dữ liệu

với kiểu khác nhau

Trang 50

 Định nghĩa biến kiểu hợp

 } sedan, pick_up, sport_utility;

 Tham chiếu các phần tử kiểu hợp

Kiểu hợp (tt)

Trang 51

 Viết một chương trình C để lưu trữ các tên và điểm số của 5 sinh viên trong một mảng cấu trúc Hãy sắp xếp mảng cấu trúc theo thứ tự điểm số giảm dần Hiển thị 3 điểm số cao nhất

Bài tập tự làm

Ngày đăng: 29/06/2014, 17:20

Xem thêm

TỪ KHÓA LIÊN QUAN

w