1. Trang chủ
  2. » Công Nghệ Thông Tin

Xâu trong lập trình C++

46 777 0

Đ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

Định dạng
Số trang 46
Dung lượng 1,02 MB

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

Nội dung

Ch ỉ số trong xâu C• Có thể truy cập tới các biến đánh chỉ số của xâu C... Thư viện• Khai báo xâu C • Các thao tác – Cần thư viện • Khi người viết chương trình muốn làm gì đó trên xâu C

Trang 1

Bài 9: Xâu

Gi ảng viên: Hoàng Thị Điệp Khoa Công ngh ệ Thông tin – ĐH Công Nghệ

Trang 2

Chapter 9

Strings

Copyright © 2010 Pearson Addison-Wesley All rights reserved

Trang 3

– Hàm thành viên get, put

– putback, peek, ignore

• Lớp chuẩn string

– Xử lý xâu

Trang 4

Gi ới thiệu

• Hai kiểu xâu kí tự:

1 Xâu C

– Mảng với kiểu cơ sở là char

– Đánh dấu kết thúc xâu bằng null, ‘\0’

– Kĩ thuật “cũ” thừa kế từ C

2 Lớp string

INT2202 DTH

Trang 5

– Hằng giá trị "Hello" được lưu dạng xâu C

Trang 6

– Khai báo nó đủ lớn để lưu xâu kích thước lớn nhất cần tới – Đánh dấu kết thúc bằng null

– Ph ải chứa kí tự null

Trang 8

Kh ởi tạo xâu C

• Có thể khởi tạo xâu C:

char myMessage[20] = "Hi there.";

– Không c ần điền đầy toàn bộ mảng

– Bước khởi tạo đặt ‘\0’ ở cuối

char shortString[] = "abc";

– T ự động đặt kích thước bằng chiều dài xâu trong ngoặc kép

c ộng 1

– KHÔNG gi ống:

char shortString[] = {‘a’, ‘b’, ‘c’};

Trang 9

Ch ỉ số trong xâu C

• Có thể truy cập tới các biến đánh chỉ số của xâu C

char ourString[5] = "Hi";

Trang 10

Thao tác d ựa trên chỉ số của xâu C

• Có thể thao tác trên các biến đánh chỉ số

char happyString[7] = "DoBeDo";

happyString[6] = ‘Z’;

– Hãy cẩn thận!

– Ở đây ‘\0’ (null) bị ghi đè bằng ‘Z’!

xâu nữa!

Trang 11

Thư viện

• Khai báo xâu C

• Các thao tác

– Cần thư viện <cstring>

• Khi người viết chương trình muốn làm gì đó trên xâu C

Trang 12

= và == trên xâu C

– Không th ể gán hay so sánh trực tiếp:

char aString[10];

aString = "Hello"; // KHÔNG H ỢP LỆ!

• Ch ỉ có thể dùng “=“ khi khai báo kết hợp khởi tạo xâu C!

strcpy(aString, "Hello");

– Hàm có s ẵn (trong <cstring> )

– Đặt giá trị của aString bằng "Hello"

– Không ki ểm tra kích thước!

• Người viết chương trình phải kiểm soát Giống như các thao tác khác trên m ảng!

Trang 13

So sánh các xâu C

char aString[10] = "Hello";

char anotherString[10] = "Goodbye";

– aString == anotherString; // Không được phép!

• Phải dùng hàm thư viện:

Trang 14

Thư viện <cstring>:

<cstring> (1/2)

• Full of string manipulation functions

INT2202 DTH

Trang 15

Thư viện <cstring>:

Display 9.1 M ột số hàm trên xâu C có sẵn trong

<cstring> (2/2)

INT2202 DTH

Trang 16

Các hàm trên xâu C: strlen()

• “Chiều dài xâu"

• Khi làm việc với xâu kí tự ta thường cần thông tin chiều dài xâu:

char myString[10] = "dobedo";

cout << strlen(myString);

– Tr ả về số lượng kí tự

• Không tính null – V ới ví dụ trên:

6

Trang 17

Các hàm trên xâu C: strcat()

• strcat()

• “Nối xâu":

char stringVar[20] = "The rain";

strcat(stringVar, "in Spain");

– K ết quả:

stringVar ch ứa "The rainin Spain"

– Hãy c ẩn thận Bổ sung dấu cách nếu cần

INT2202 DTH

Trang 18

Đối số và tham số kiểu xâu C

• Nhắc lại: xâu C là mảng

– Xâu C truy ền vào hàm có thể bị hàm biến đổi

Trang 19

Ghi xâu C

• Ta có thể ghi xâu C ra thiết bị xuất (màn hình) dùng toán

tử chèn <<

• Thật ra ta đã làm việc này rồi:

cout << news << " Wow.\n";

– Trong đó news là một biến kiểu xâu C

• Có thể là do toán tử << đã được nạp chồng cho xâu C!

Trang 20

Đọc vào xâu C

• Có thể đọc dữ liệu từ thiết bị nhập (bàn phím) vào xâu C dùng toán tử trích >>

– Tuy nhiên, có vấn đề nảy sinh

• Dấu trắng được xem là “kí tự phân cách” (delimiter)

– Tab, cách, xuống dòng bị bỏ qua

– Việc đọc dừng khi gặp kí tự phân cách

INT2202 DTH

Trang 21

– Lưu ý: phần gạch dưới được nhập từ bàn phím

• Xâu C a đọc vào “do”

• Xâu C b đọc vào “be”

Trang 23

Ví d ụ: đối số dòng lệnh

• Chương trình được gọi từ dòng lệnh (ví dụ: UNIX shell, nơi nhắc lệnh DOS) có thể nhận đối số

Trang 24

Ví d ụ: đối số dòng lệnh

– int main(int argc, char *argv[])

tên của chương trình Do đó argc luôn ≥ 1

• argv[0] lưu tên của chương trình được gọi

• argv[1] lưu tham số thứ nhất

• argv[2] lưu tham số thứ hai

• v.v

INT2202 DTH

Trang 25

Example: Command Line Arguments

INT2202

// Test.cpp

// In ra màn hình các đối số truyền qua dòng lệnh

cout << "Doi so " << i << ": " << argv[i] << endl; }

Doi so 0: Test Doi so 1: hello Doi so 2: world

G ọi chương trình Test t ừ nơi

nh ắc lệnh

DTH

Trang 28

– Đọc kí tự tiếp theo và đưa vào biến nextSymbol

– Đối số phải có kiểu char

• Không thể là xâu

Trang 29

Hàm thành viên put()

• Ghi từng kí tự một ra thiết bị xuất

Trang 31

Ví d ụ: Chương trình dùng hàm putback

// Ngu ồn: http://cplusplus.com/reference/iostream/istream/putback/ // istream putback

Trang 32

Các hàm thao tác v ới kí tự:

Display 9.3 M ột số hàm trong <cctype> (1/3)

INT2202 DTH

Trang 33

Các hàm thao tác v ới kí tự:

Display 9.3 M ột số hàm trong <cctype> (2/3)

INT2202 DTH

Trang 34

Các hàm thao tác v ới kí tự:

Display 9.3 M ột số hàm trong <cctype> (3/3)

INT2202 DTH

Trang 36

Display 9.4

Chương trình dùng lớp string

INT2202 DTH

Trang 37

Đọc/ghi với lớp string

May the hair on your toes grow long and curly!

• Toán t ử trích bỏ qua dấu trắng:

s1 đọc vào giá trị "May"

s2 đọc vào giá trị "the"

INT2202 DTH

Trang 38

getline() v ới lớp string

Trang 39

– Nhận dữ liệu tới khi gặp dấu ‘?’

• getline() trả về tham chiếu

– string s1, s2;

getline(cin, s1) >> s2;

– Cho kết quả là: (cin) >> s2;

INT2202 DTH

Trang 40

L ỗi thường gặp: Kết hợp các phương pháp đọc

• Hãy c ẩn thận khi kết hợp cin >> var v ới getline

Trang 41

X ử lý xâu với lớp string

Trang 42

Display 9.7 Hàm thành viên c ủa

l ớp string chuẩn (1/2)

INT2202 DTH

Trang 43

Display 9.7 Hàm thành viên c ủa

l ớp string chuẩn (1/2)

INT2202 DTH

Trang 44

Chuy ển đổi giữa xâu C và đối tượng string

• Chuy ển đổi kiểu tự động

– Từ xâu C thành đối tượng string:

char aCString[] = "My C-string";

• Không th ể tự động chuyển thành xâu C

strcpy(aCString, stringVar.c_str());

Trang 45

Tóm t ắt

• Biến kiểu xâu C là “mảng kí tự”

– V ới kí tự null (‘\0’) bổ sung ở cuối

– Không th ể gán, so sánh như các biến đơn

• Các thư viện <cctype> & <string> có nhiều hàm xử lý giúp xử lý xâu dễ dàng

• cin.get() đọc kí tự tiếp theo trong luồng

• getline() đọc hết 1 dòng trong luồng

• Thao tác với đối tượng string tiện lợi hơn xâu C

Trang 46

Chu ẩn bị bài tới

Ngày đăng: 13/09/2015, 22:57

TỪ KHÓA LIÊN QUAN

w