Ví dụ mảng con trỏ

Download Report

Transcript Ví dụ mảng con trỏ

CHƯƠNG 7
CHUỖI KÝ TỰ
1
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ự)
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ỗi
Hằ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;
pc
s
I
L
O
V
E
C
+
+
3
Khởi tạo chuỗi
 Cú pháp: char stringName= “Hằng chuỗi”
Ví dụ:
char str[] = {‘H’, ’e’, ’l’, ’l’, ’o’, ’\0’}; //CÁCH 1
char str[] = “Hello”; //CÁCH 2
char *str = “Hello”; //CÁCH 3
4
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ông
 int isdigit(int kt); là hàm kiểm tra kt có phải là
chữ số hay không
 int 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
5
4. Một số hàm liên quan đến chuỗi
 Hàm nhập chuỗi:
char *get(char *str);
o Tá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 str
o Chú ý 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)
o Ngoài ra ta có thể dùng thủ tục cin hoặc cin.getline
 Hàm xuất chuỗi:
char *puts(char *str);
o Tác dụng: xuất chuỗi str ra thiết bị xuất chuẫn
o Ngoà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
6
Một số hàm khác liên qua đến chuỗi
Tê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
Hàm đảo ngược các kí tự trong
chuỗi
char * strrev(char *st)
Đà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ỗi
Tác dụng
Tên hàm
strcat(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
8
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
char arrayList[][length] = { constantString1, constantString2,...,
constantStringN
};
Ví dụ:
char listOfPL[][10] = { “Pascal”, “C++”, “C#” };
9
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
Ví dụ mảng con trỏ
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ụ: kiểm tra chuỗi đối xứng
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 “;
}
Đà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
12
Ví dụ: In Hoa Đầu Mỗi 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;
}
Đà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
13
Ví dụ: Tìm chuỗi con
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
Thực hiện bài tập chương 7
15