15
CHƯƠNG 7 CHUỖI KÝ TỰ 1

CHƯƠNG 7 CHUỖI KÝ TỰ

Embed Size (px)

DESCRIPTION

CHƯƠNG 7 CHUỖI KÝ TỰ. 1. Khái niệm Trong C++ không có kiểu dữ liệu cơ bản để lưu các xâu kí tự . Để có thể thỏa mãn nhu cầu này , người ta sử dụng mảng có kiểu char . Chuỗi kí tự thực chất là mảng một chiều các phần tử có kiểu char ( mảng 1 chiều các kí tự ) - PowerPoint PPT Presentation

Citation preview

Page 1: CHƯƠNG 7 CHUỖI KÝ TỰ

CHƯƠNG 7

CHUỖI KÝ TỰ

1

Page 2: CHƯƠNG 7 CHUỖI KÝ TỰ

1. Khái niệmTrong C++ không có kiểu dữ liệu cơ bản để lưu các xâu kí tự. Để có thể thỏa mãn nhu cầu này, người ta sử dụng mảng có kiểu char. Chuỗi kí tự thực chất là mảng một chiều các phần tử có kiểu char (mảng 1 chiều các kí tự)Một chuỗi trong C luôn luôn được kết thúc bằng ‘\0’ (kí tự NULL), kí tự này do C tự động thêm vào khi chúng ta nhập dữ liệu cho chuỗiHằng chuỗi được đặt trong cặp nháy kép, ví dụ: “I LOVE C++”

2

Page 3: CHƯƠNG 7 CHUỖI KÝ TỰ

2. Khai báo Chuỗi

Cách 1: Dùng mảng một chiều

char stringName[Max_Length];

Ví dụ: char s[10]; Cách 2: Dùng con trỏ

  char *PointerName;

Ví dụ: char *pc;

3

II LL OO VV EE CC ++ ++ss

pcpc

Page 4: CHƯƠNG 7 CHUỖI KÝ TỰ

Khởi tạo chuỗi

char str[] = {‘H’, ’e’, ’l’, ’l’, ’o’, ’\0’}; //CÁCH 1

char str[] = “Hello”; //CÁCH 2

char *str = “Hello”; //CÁCH 3

4

Cú pháp: char stringName= “Hằng chuỗi”

Ví dụ:

Cú pháp: char stringName= “Hằng chuỗi”

Ví dụ:

Page 5: CHƯƠNG 7 CHUỖI KÝ TỰ

5

3. Một số hàm liên quan đến kí tự

int isalnum(int kt); là hàm kiểm tra kt có phải là kí tự (chữ cái hoặc chữ số) hay không int isalpha(int kt); là hàm kiểm tra kt có phải là chữ cái hay khôngint isdigit(int kt); là hàm kiểm tra kt có phải là chữ số hay khôngint islower(int kt); là hàm kiểm tra kt có phải là chữ cái thường hay không…

Đào Thị Cẩm Hằng- Khoa KH và KT Máy Tính- Trường ĐẠI HỌC CÔNG NGHIỆP TP.HCM

Page 6: CHƯƠNG 7 CHUỖI KÝ TỰ

6

4. Một số hàm liên quan đến chuỗi

Hàm nhập chuỗi: char *get(char *str);oTác dung: Chờ nhập vào từ bàn phím chuỗi kí tự, hàm trả về con trỏ trỏ đến đầu chuỗi stroChú ý rằng, để đảm bảo bộ đệm bàn phím được làm rỗng trước khi nhập dữ liệu chuỗi, chúng ta nên sử dụng hàm fflush(stdin)oNgoài ra ta có thể dùng thủ tục cin hoặc cin.getlineHàm xuất chuỗi: char *puts(char *str);oTác dụng: xuất chuỗi str ra thiết bị xuất chuẫnoNgoài ra ta có thể dùng thủ tục cout

Đào Thị Cẩm Hằng- Khoa KH và KT Máy Tính- Trường ĐẠI HỌC CÔNG NGHIỆP TP.HCM

Page 7: CHƯƠNG 7 CHUỖI KÝ TỰ

7

Một số hàm khác liên qua đến chuỗiTên hàm Tác dụng

unsigned strlen(const char *str); Hàm này trả về chiều dài của chuỗi

strcpy(char *dest, char *src); Sao chép nội dung trong chuỗi src vào chuỗi dest. Hàm trả về con trỏ trỏ tới địa chỉ đầu chuỗi dest

char* strncpy(char *dest, const char * src, unsigned maxlen);

sao chép maxlen kí tự đầu chuỗi src vào trong dest

int strcmp(char *s1,char *s2) So sánh có phân biệt chữ hoa và chữ thường hai chuỗi s1,s2

char * strrev(char *st) Hàm đảo ngược các kí tự trong chuỗi

Đào Thị Cẩm Hằng- Khoa KH và KT Máy Tính- Trường ĐẠI HỌC CÔNG NGHIỆP TP.HCM

Page 8: CHƯƠNG 7 CHUỖI KÝ TỰ

8

Một số hàm khác liên qua đến chuỗi

Tên hàm Tác dụngstrcat(s1,s2) Ghép chuỗi s2 vào sau chuỗi s1

strchr(s,c) Tìm kí tự c có trong chuỗi s không

strstr(s1,s2) Tìm chuỗi s2 có trong chuỗi s1 không

int atoi( const char *str ); Chuyển chuỗi thành kiểu int

double atof( const char *str );

Chuyển chuỗi thành kiểu float

… ….

Đào Thị Cẩm Hằng- Khoa KH và KT Máy Tính- Trường ĐẠI HỌC CÔNG NGHIỆP TP.HCM

Page 9: CHƯƠNG 7 CHUỖI KÝ TỰ

5. Mảng các Chuỗi Mảng các Chuỗi là một mảng ký tự hai chiều. Kích

thước của chỉ mục thứ nhất là số Chuỗi và kích thước của chỉ mục thứ hai xác định chiều dài lớn nhất của mỗi Chuỗi.

Ví dụ: char str[5][80];Khởi tạo mảng các Chuỗi

9

char arrayList[][length] = { constantString1, constantString2,..., constantStringN

};

Ví dụ:

char listOfPL[][10] = { “Pascal”, “C++”, “C#” };

Page 10: CHƯƠNG 7 CHUỖI KÝ TỰ

7. Mảng con trỏ đến các Chuỗi

Ngoài cách dùng mảng ký tự hai chiều để lưu trữ mảng các Chuỗi, ta có thể dùng mảng của các con trỏ. Mỗi con trỏ sẽ chứa địa chỉ của Chuỗi

Ví dụ:char *str[20];

10

Page 11: CHƯƠNG 7 CHUỖI KÝ TỰ

void main()

{

char *name[5];

for(int i=0 ; i<5 ; i++)

name[i] = new char[50];

  for(int i=0 ; i<5 ; i++)

{

cout << "Input name " << i+1 <<": ";

gets(name[i]);

}

  cout << "List of names: ";

for(int i=0 ; i<5 ; i++)

cout << name[i] << ", ";

}11

Ví dụ mảng con trỏ

Page 12: CHƯƠNG 7 CHUỖI KÝ TỰ

 void main()

{ char s[255];

cout<<“Ban hay nhap chuoi:”;

gets(s);

int len=strlen(s);

int flag=1;

for (int i=0; i < len/2 ; i++)

if (*(s+i)!= *(s+l-i-1))

{

flag=0;

break;

}

if(flag==0) cout<<"chuoi khong doi xung “;

}12

Ví dụ: kiểm tra chuỗi đối xứng

Đào Thị Cẩm Hằng- Khoa KH và KT Máy Tính- Trường ĐẠI HỌC CÔNG NGHIỆP TP.HCM

Page 13: CHƯƠNG 7 CHUỖI KÝ TỰ

void main(){

char *s=new char[80];cout<<“Nhap chuoi:”;gets(s);s[0]=toupper(s[0]);for (int i=0; i<strlen(s);i++)

if (s[i]= =' ')s[i+1]=toupper(s[i+1]);

puts(s);delete s;

}

13

Ví dụ: In Hoa Đầu Mỗi Từ

Đào Thị Cẩm Hằng- Khoa KH và KT Máy Tính- Trường ĐẠI HỌC CÔNG NGHIỆP TP.HCM

Page 14: CHƯƠNG 7 CHUỖI KÝ TỰ

void main()

{

char *p, str1[20], str2[20];cout<<"nhap chuoi 1:"; gets(str1);

cout<<"nhap chuoi 2:"; gets(str2);

p= strstr(str1,str2);

if(p==NULL)

cout<<"Khong tim thay ";

else

cout<<"Tim thay tai vi tri "<< (p-str1) ;

}

14

Ví dụ: Tìm chuỗi con

Page 15: CHƯƠNG 7 CHUỖI KÝ TỰ

Thực hiện bài tập chương 7

15