Bài giảng Phương pháp lập trình - Chương 7: Chuỗi ký tự cung cấp cho người học các kiến thức: Kí tự, giới thiệu chuỗi, khai báo và khởi tạo chuỗi, nhập, xuất chuỗi, một số hàm thao tác trên chuỗi, mảng chuỗi, mảng con trỏ chuỗi. Mời các bạn cùng tham khảo nội dung chi tiết.
Trang 1Chương 7
Trang 2Nội dung trình bày
1. Kí tự
2. Giới thiệu chuỗi
Trang 31 Kí tự: Khai báo
mã ASCII của nó, do đó có thể viết:
ch = 97; thay cho ch='a';
Trang 41 Kí tự: Một số hàm (ctype.h)
int isalpha(int ch ) : hàm trả về số khác 0 nếu
ch là kí tự chữ cái, ngược lại hàm trả về 0
◦ Ví dụ: int i = isalpha(‘x’); // i!=0
int j = isalpha(‘1’); // j=0
int isdigit(int ch ): hàm trả về số khác 0
nếu ch là kí tự chữ số, ngược lại hàm trả về 0
◦ Ví dụ: int i = isalpha(‘x’); // i=0
int j = isalpha(‘1’); // j!=0
int isascii(int ch ): hàm trả về số khác 0 nếu
ch là một ký tự có mã ASCII <128
Trang 51 Kí tự: Một số hàm (ctype.h)
int isspace(int ch ): hàm trả về số khác 0 nếu
ch là kí tự khoảng trắng, ngược lại hàm trả về 0
◦ Ví dụ: int i = isspace(‘ ’); // i!=0
int j = isspace(‘x’); // j=0
int iscntrl(int ch ) : hàm trả về số khác 0
nếu ch là kí tự điều khiển, ngược lại hàm trả về 0
int isupper(int ch ) : hàm trả về số khác 0 nếu
ch là kí tự in hoa, ngược lại hàm trả về 0
◦ Ví dụ: int i = isupper(‘Y’); // i!=0
int j = isupper(‘y’); // j=0
Trang 61 Kí tự: Một số hàm (ctype.h)
int islower(int ch ) : hàm trả về số khác 0
nếu ch là kí tự in thường, ngược lại hàm trả về 0
◦ Ví dụ: int i = islower(‘Y’); // i=0
Trang 7const int MAX=80;
for ( int i=0; i<=255; i++ )
Trang 8Nội dung trình bày
1. Kí tự
2. Giới thiệu chuỗi
Trang 92 Giới thiệu chuỗi
tự null ('\0')
Ví dụ:
nháy đôi Ví dụ: "Hello"
Trang 10Nội dung trình bày
1. Kí tự
2. Giới thiệu chuỗi
Trang 113 Khai báo và khởi tạo chuỗi
char Tên_chuỗi[ Số_kí_tự_tối_đa ];
char Tên_chuỗi[ Số_kí_tự_tối_đa ];
char* Tên_chuỗi;
char* Tên_chuỗi ;
Trang 123 Khai báo và khởi tạo chuỗi (tt)
định ta dùng cú pháp khai báo và khởi tạo mảng
◦ Ví dụ: char str[] = {'H', 'e', 'l', 'l', 'o', '\0'};
◦ Ví dụ: char str[] = "Hello";
char *str = "Hello";
char Tên_biến[ ] = "Hằng Chuỗi" ; char* Tên_biến = "Hằng Chuỗi" ; char Tên_biến [ ] = " Hằng Chuỗi " ;
char* Tên_biến = " Hằng Chuỗi " ;
Trang 133 Khai báo và khởi tạo chuỗi (tt)
name = " Thi No "; //LỖI
Lưu ý khi khai báo chuỗi và gán giá trị cho chuỗi
Trang 14Nội dung trình bày
1. Kí tự
2. Giới thiệu chuỗi
Trang 154.1 Nhập chuỗi
Để nhập dữ liệu cho biến chuỗi, ta dùng hàm gets của thư viện stdio.h
◦ Hàm gets sẽ đọc các ký tự gõ từ bàn phím vào
char* gets( char* s );
char* gets ( char* s );
Trang 16int puts(const char *s);
int puts (const char *s);
Trang 17cout<<"Nhap vao 1 chuoi: ";
gets(str);
cout<<"\nChuoi da nhap la: ";
puts(str);
}
Trang 18Nội dung trình bày
1. Kí tự
2. Giới thiệu chuỗi
Trang 195 Một số hàm trên chuỗi
Toán tử []: Truy xuất từng ký tự, vì chuỗi là một mảng nên có thể truy xuất từng phần tử
char name[] = "John Doe";
for ( int i=0; i<strlen(s); i++ )
xử_lý s[i]
19
Trang 20cout<<" nhap chuoi 1: "; gets(str1); // str1=“abc”
cout<<" nhap chuoi 2: "; gets(str2); // str2=“xyz”
strcpy(str2, str1);
Trang 215 Một số hàm trên chuỗi (tt)
Sao chép n kí tự đầu tiên của chuỗi s2 vào s1
◦ Ví dụ:
char str1[10], str2[10];
cout<<" nhap chuoi 1: "; gets(str1); // str1=“abc”
cout<<" nhap chuoi 2: "; gets(str2); // str2=“xyz”
strncpy(str2, str1, 2);
Trang 225 Một số hàm trên chuỗi (tt)
strcat(char* s1, char* s2) : Nối chuỗi s2
vào cuối chuỗi s1
◦ Ví dụ:
char str1[10], str2[10];
cout<<" nhap chuoi 1: "; gets(str1); // str1=“abc”
cout<<" nhap chuoi 2: "; gets(str2); // str2=“xyz”
strcat(str1, str2);
Trang 235 Một số hàm trên chuỗi (tt)
Nối n kí tự đầu tiên của chuỗi s2 vào cuối chuỗi s1
◦ Ví dụ:
char str1[10], str2[10];
cout<<" nhap chuoi 1: "; gets(str1); // str1=“abc”
cout<<" nhap chuoi 2: "; gets(str2); // str2=“xyz”
strncat(str1, str2, 2);
Trang 24char str1[20], str2[20]; int id;
cout<<“ Nhap chuoi 1: "; gets(str1);
cout<<“ Nhap chuoi 2: "; gets(str2);
id = strcmp(str1, str2);
if (id== 0 )
cout<<“ Hai chuoi bang nhau ";
else cout<<" Hai chuoi khac nhau ";
Trang 255 Một số hàm trên chuỗi (tt)
strncmp(char* s1 , char* s2 , int n ) :
Hàm so sánh n kí tự đầu tiên của chuỗi s1 với n ký
tự đầu tiên của chuỗi s2, hàm trả về:
0 nếu s1=s2
số dương nếu s1>s2
số âm nếu s1<s2
◦ Ví dụ:
char s1[20], s2[20]; int id;
cout<<" Nhap chuoi 1: "; gets(s1);
cout<<" Nhap chuoi 2: "; gets(s2);
id = strncmp(s1, s2, 5);
if (id== 0 )
cout<<" Hai chuoi bang nhau ";
else cout<<" Hai chuoi khac nhau ";
Trang 265 Một số hàm trên chuỗi (tt)
strchr(char* s , char ch ) : Hàm tìm kí tự
ch có trong chuỗi s hay không, nếu có hàm trả về
con trỏ trỏ đến vị trí xuất hiện đầu tiên của ký tự
ch trong chuỗi s, nếu không có hàm trả về NULL
◦ Ví dụ:
char *p, h, s[20];
cout<<" nhap chuoi 1: "; gets(s);
cout<<" Nhap ki tu muon tim: "; cin>>h;
p = strchr(s, h);
if (p== NULL )
cout<<" Khong tim thay ";
else cout<<" Tim thay tai vi tri "<<(p-s);
Trang 275 Một số hàm trên chuỗi (tt)
s2 có trong s1 hay không, nếu có thì trả về con
trỏ trỏ đến vị trí xuất hiện đầu tiên của chuỗi s2
◦ Ví dụ:
char *p, s1[20], s2[20];
cout<<" Nhap chuoi 1: "; gets(s1);
cout<<" Nhap chuoi 2: "; gets(s2);
Trang 285 Một số hàm trên chuỗi (tt)
stdlib.h
◦ atoi (s): hàm chuyển chuỗi số s thành kiểu int
◦ atof (s): hàm chuyển chuỗi số s thành kiểu float
◦ atol (s): hàm chuyển chuỗi số s thành kiểu long
Trang 29Nội dung trình bày
1. Kí tự
2. Giới thiệu chuỗi
Trang 306 Mảng chuỗi: Giới thiệu
◦ Ví dụ: char arrS[5][80];
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
có chiều dài tối đa là 79 ký tự
Ví dụ:
char dsNN [][ 10 ] ={"Pascal", "C++", "Java"};
char Tên_Mảng [][ độ_dài ] = {" Chuoi 1 ", …, " Chuoi n "};
Trang 31for ( int i=0; i<n; i++ ){
cout<<" Chuoi thu "<<i+1<<" : ";
puts(s[i]);
}
}
Trang 32Nội dung trình bày
1. Kí tự
2. Giới thiệu chuỗi
Trang 347 Mảng con trỏ chuỗi: Ví dụ
void NhapMangConTroChuoi( char *s[], int n)
{
for ( int i=0; i<n; i++ ){
cout<<" Nhap chuoi thu "<<i+1<<" : ";
s[i] = new char[20]; // cấp phát vùng nhớ
for ( int i=0; i<n; i++ ){
cout<<" Chuoi thu "<<i+1<<" : ";
puts(s[i]);
}
}