Upload
kirsten-horn
View
42
Download
0
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
CHƯƠNG 7
CHUỖI KÝ TỰ
1
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
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
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ụ:
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
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
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
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
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#” };
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
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ỏ
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
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
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
Thực hiện bài tập chương 7
15