NGÔN NGỮ LẬP TRÌNH C/C++fit.hnue.edu.vn/~trungnc/TextBookAndLectureNote/Ki thuat lap trinh...
Transcript of NGÔN NGỮ LẬP TRÌNH C/C++fit.hnue.edu.vn/~trungnc/TextBookAndLectureNote/Ki thuat lap trinh...
-
Facu
lty o
f In
form
ati
on
Tech
no
log
y
NGÔN NGỮ LẬP TRÌNH C/C++
TS. Nguyễn Chí Trung
Khoa Công nghệ thông tin
Đại học Sư Phạm Hà Nội
-
1. Cài đặt xâu kí tự bằng con trỏ kiểu char
2. XD các phép toán trên xâu lí tự thông qua con trỏ kiểu char
3. Một số bài toán xử lí xâu kí tự trên lớp String của C++
4. Mảng các phần tử là xâu lí tự
5. Truyền xâu kí tự vào hàm
6. Truyền xâu kí tự vào hàm; Dùng file văn bản vào/ra DL xâu kí tự
Chương 5. Con trỏ và xâu lí tự
-
• Cài đặt xâu kí tự bằng mảng kiểu char
• Cài đặt xâu kí tự bằng con trỏ kiểu char
• Cấp phát bộ nhớ động cho con trỏ kiểu char
• Xây dựng các phép toán trên xâu kí tự quản lí bởi con
trỏ kiểu char
1. Cài đặt xâu kí tự bằng con trỏ kiểu char
-
• Xâu kí tự có thể được cài đặt bằng mảng kiểu char như sau:
char s[10];
• Nếu s chứa xâu kí tự “Hi Mom!”, nó được lưu trữ trong mảng sau:
• Các chú ý:
xâu s trong C là mảng kí tự, mỗi s[i] là một kí tự, i = 0, 1, ..., 9
s lưu được 9 kí tự
kí tự thứ 7 là kí tự ‘\0’ (NULL) được tự động thêm vào. Điều
này khác với mảng chuẩn; không được phép gán s[7] bằng kí tự
khác, vì nó đè lên NULL.
Tên mảng s là hằng địa chỉ
Cài đặt xâu kí tự bằng mảng kiểu char
NCT.FIT.HNUE 4
s[0] s[1] s[2] s[3] s[4] s[5] s[6] s[7] s[8] s[9]
H i M o m ! \0 ? ?
-
• Khởi tạo xâu được cài đặt bởi mảng kiểu char có thể thực hiện
bằng một trong 2 cách sau:
• Cách 1
char s[50] = “Hello World!” ;
//Không cần đủ kích thước
//Kí tự NULL được tự động thêm vào cuối
• Cách 2
char s[] = “Hello!” ;
//Tự động tính kích thước mảng
//Khác với lệnh
char s[] = {‘H’, ‘e’, ‘l’, ‘l’, ‘o’, ‘!’};
Cài đặt xâu kí tự bằng mảng kiểu char
NCT.FIT.HNUE 5
-
• Có thể dùng con trỏ kiểu char để cài đặt xâu kí tự
char *s ;
• Chú ý so sánh hai cách dùng mảng kiểu char và con trỏ kiểu char
Cài đặt xâu kí tự bằng con trỏ kiểu char
NCT.FIT.HNUE 6
char x[10]; char *y;
- Nhập được bằng gets(x)
- In ra được bằng puts(x)
- Không gán được hằng xâu kí
tự cho biến mảng kí tự x, tức
là lệnh x = “Hello” sai (vì
không gán 2 hằng địa chỉ cho
nhau)
- Không nhập được bằng
gets(y) vì chưa biết y trỏ vào
địa chỉ xâu kí tự nào
- In ra được bằng puts(y) vì
khi đó mặc định y đã trỏ tới
địa chỉ xác định của 1 xâu
- Nhưng y=“Hello!” đúng.
-
• Nhập xâu được xác định bởi con trỏ kiểu char trong C
#include
#include
#include
int main(){
char *s; int n=30;
s=(char*) malloc (n*sizeof(char));
puts("nhap s: "); gets(s);
cout
-
• Nhập xâu được xác định bởi con trỏ kiểu char trong C++
#include
#include
using namespace std;
int main(){
char *s; int n=30;
s = new char[n+1];
cout
-
Phân biệt 2 cách dùng malloc và new
NCT.FIT.HNUE 9
Trong C Trong C++
char tg[100];
gets(tg);
/* Cấp phát bộ nhớ cho con trỏ s kiểu
char để có thể chứa được dãy ký tự
trong mảng tg */
char *s;
int len;
len=strlen(tg);
s=(char*) malloc ((len+1)*sizeof(char));
strcpy(s,tg);
//......Các lệnh sử dụng s
free(s); /* Giải phóng bộ nhớ */
char tg[100];
gets(tg);
/* Cấp phát bộ nhớ cho con trỏ s
kiểu char để có thể chứa được dãy
ký tự trong mảng tg */
char *s;
int len=strlen(tg);
s = new char[len+1]
strcpy(s,tg);
//.... Các lệnh sử dụng s
delete s; // Giải phóng bộ nhớ
• Phân biệt 2 cách dùng malloc và new trong hai đoạn trình sau
-
Cài đặt xâu kí tự bằng con trỏ kiểu char
NCT.FIT.HNUE 10
#include
#include
#include
using namespace std;
int main(){
char tg[100];
cout
-
2. Xây dựng các phép toán cơ bản trên xâu
được quản lý bởi con trỏ kiểu char
• Hàm copy(s, i, n) và hàm clean(s)
• Hàm Syntax(s) và các hàm
delete(s, i, n);
insert(x, s, k);
pos(x, s);
-
• Các hàm và thủ tục thông dụng trên xâu trong Pascal
Review: Các hàm và thủ tục tiện ích trên xâu
NCT.FIT.HNUE 12
Hàm và thủ tục Ví dụ
copy(s, i, n) copy(‘K64K, FIT’, 2, 3) = ‘64K’
copy(‘K64K, FIT’, 7, 10) = ‘FIT’
pos(x, s) pos(‘64K’, ‘K64K, FIT’) = 2
(Nếu bằng 0 thì không có x trong s)
delete(s, i, n) s := ‘K64K, FIT.HNUE’;
delete(s, 5, 5); s = ‘K64K.HNUE’
Insert(x, s, i) s := ‘K64K.HNUE’;
Insert(‘, FIT’, s, 5); s = ‘K64K, FIT.HNUE’;
-
• Xây dựng hàm copy(s, k, n). Vận dụng để đếm số từ trong xâu
Hàm copy
NCT.FIT.HNUE 13
#include
#include
#define max 200
using namespace std;
char *copy(char *s,int k,int n);
int main() {
char x[max],s[max];
int k,lx,d=0;
cout
-
• Xây dựng hàm clean(s) xóa các dấu cách vô nghĩa trong xâu
Hàm clean
NCT.FIT.HNUE 14
#include
#include
#define max 100
using namespace std;
char *clean(char *s);
void mycout(char *s);
int main() {
char tg[max],*s;
cout
-
Xây dựng chương trình để sửa lỗi cú pháp trong văn bản
Chương trình để sửa lỗi cú pháp trong văn bản
NCT.FIT.HNUE 15
#include
#include
#include
#define max 100
#define sperator ','
#define pointstop '.'
using namespace std;
//
char *myinsert(char *x,char *s,int k);
char *mydelete(char *s,int k,int n);
char *mycopy(char *s,int k,int n);
int pos(char *x,char *s);
char *syntax(char *s,char symbol);
void mycout(char *s);
//
int main() {
char tg[max],s[max],x[max];
cout
-
Xây dựng các hàm myinsert, mydelete
Các hàm insert, delete kiểu char
NCT.FIT.HNUE 16
char *myinsert
(const char *x,char *s,int k)
{
int i,j1=0,j2=0;
char s1[max],s2[max];
for(i=0;i
-
Xây dựng các hàm mycopy, pos, và mycout
Các hàm copy, pos và cout
NCT.FIT.HNUE 17
char *mycopy(char *s,int k,int n) {
int i,j=0;
char *s1;
s1 = new char [strlen(s)+1];
for(i=0;s[i]!='\0';i++)
if((i>=k)&&(j
-
Xây dựng hàm Syntax kiểu char
Hàm syntax kiểu char
NCT.FIT.HNUE 18
char *syntax(char *s,char symbol) {
#define space ' '
#define error1 " ," // cách phẩy
#define error2 ", " // phẩy cách cách
#define error3 " ." // cách chấm
#define error4 ". " // chấm cách cách
int k,ls,i=0;
ls=strlen(s);
while(i-1) mydelete(s,k,1);
while((k=pos(error2,s))>-1) mydelete(s,k+1,1);}
else {
while((k=pos(error3,s))>-1) mydelete(s,k,1);
while((k=pos(error4,s))>-1) mydelete(s,k+1,1);}
return(s); }
-
3. Một số bài toán xử lí xâu kí tự
sử dụng lớp String của C++
• Phong cách lập trình mới
• Lớp String
-
• Bài 1. Hãy lập trình đếm số lần xuất hiện của xâu con
trong một xâu
• INPUT: Xâu S và xâu x
• OUTPUT: d = số lần xuất hiện của x trong S
Đếm xâu con
NCT.FIT.HNUE 20
-
• Bài 1. Đếm số lần xuất hiện của xâu con x trong xâu s
Đếm xâu con
NCT.FIT.HNUE 21
#include
using namespace std;
string s, x; int d;
void enter()
{ cin >> s >> x;
}
void solve()
{ for(int i=0; i+x.size()
-
• Bài 2. Hãy lập trình Đếm số từ, số câu, số từ độ dài 3; tìm một từ
dài nhất, tìm một câu dài nhất. Giả sử giữa hai từ trong xâu Input
chỉ có một dấu cách.
• INPUT: Xâu S
• OUTPUT:
– st : số từ trong S
– sc: số câu trong S
– st3: số từ độ dài 3 trong xâu S
– wm: từ dài nhất
– sm: câu có độ dài dài nhất trong các câu trong S
Thống kê văn bản
NCT.FIT.HNUE 22
-
• Bài 2. Đếm số từ, số câu, tìm từ max, câu max, từ leng = 3
Thống kê văn bản
NCT.FIT.HNUE 23
#include
using namespace std;
const int maxn=1000;
int t;
string s[maxn], S;
void enter() {
while(cin>>s[++t]);
t--; S="";
for(int i=1; i
-
• Bài 2. Đếm số từ, số câu, tìm từ max, câu max, từ leng = 3
Thống kê văn bản
NCT.FIT.HNUE 24
void solve(){
int danhDau=0, slTu=0,
slTuDoDai3=0;
int tudodaiMax=0,
caudodaiMax=0, slCau=0;
string wm, sm;
for(int i=0; i
-
• Bài 2. Đếm số từ, số câu, tìm từ max, câu max, từ leng = 3
Thống kê văn bản
NCT.FIT.HNUE 25
#define task "bai2"
int main() {
freopen(task".inp", "r", stdin);
freopen(task".out", "w", stdout);
enter();
solve();
return 0;
}
-
• Bài 3. Một văn bản bị lỗi thừa dấu cách là văn bản có ít nhất một
trong các lỗi sau:
– Giữa 2 từ có nhiều hơn một dấu cách
– Có dấu cách ở đầu văn bản
– Có dấu cách ở cuối văn bản
• Hãy lập chương trình tạo và sử dụng hàm sửa lỗi về thừa dấu cách
trong văn bản.
• INPUT: S: Một đoạn văn bản có lỗi thừa dấu cách
• OUTPUT: S: Đoạn văn bản không có lỗi thừa dấu cách
Sửa lỗi dấu cách trong văn bản
NCT.FIT.HNUE 26
-
• Bài 3. Sửa lỗi dấu cách
Sửa lỗi dấu cách trong văn bản
NCT.FIT.HNUE 27
#include
using namespace std;
string c; string s;
string read_paragraph( istream &is )
{
string line, s="";
do
{
getline(is, line);
if(line!="")s+=line+'\n';
} while(line!="");
return s;
}
-
• Bài 3. Sửa lỗi dấu cách
Sửa lỗi dấu cách trong văn bản
NCT.FIT.HNUE 28
void enter()
{
s=read_paragraph(cin);
}
string fix( string s )
{
while(s.size()>0 && s[0]==‘ ')
s.erase(0, 1);
while(s.size()>0 && s[(int)s.size()-1]==' '
|| s[(int)s.size()-1]=='\n')
s.erase((int)s.size()-1, 1);
string res="";
for(int i=0; i
-
• Bài 3. Sửa lỗi dấu cách
Sửa lỗi dấu cách trong văn bản
NCT.FIT.HNUE 29
void solve()
{
s=fix(s);
cout
-
• Bài 4. Một văn bản bị lỗi về dấu ngăn cách, ví dụ dấu ngăn cách là
dấu phẩy (,), là văn bản có ít nhất một trong các lỗi sau:
– Có dấu cách trước dấu phẩy, ví dụ “Ha Noi , thu do cua Viet
Nam”
– Không có dấu cách sau dấu phẩy, ví dụ “Ha Noi ,thu do cua Viet
Nam”
• Hãy lập chương trình tạo và sử dụng một hoặc một số hàm sửa lỗi
về các dấu ngăn cách sau đây trong văn bản: dấu phẩy (,), dấu chấm
(.), dấu hai chấm (:), dấu chấm than (!).
• INPUT: S: Một đoạn văn bản có lỗi về dấu ngăn cách
• OUTPUT: S: Đoạn văn bản không có lỗi về dấu ngăn cách
Sửa lỗi dấu cách tổng quát trong văn bản
NCT.FIT.HNUE 30
-
• Bài 4. Sửa lỗi dấu cách tổng quát
Sửa lỗi dấu cách tổng quát trong văn bản
NCT.FIT.HNUE 31
#include
using namespace std;
string c; string s;
string read_paragraph( istream &is )
{
string line, s="";
do
{
getline(is, line);
if(line!="")s+=line+'\n';
} while(line!="");
return s;
}
void enter()
{
s=read_paragraph(cin);
}
-
• Bài 4. Sửa lỗi dấu cách tổng quát
Sửa lỗi dấu cách tổng quát trong văn bản
NCT.FIT.HNUE 32
string fix( string s )
{
while(s.size()>0 && s[0]==' ') s.erase(0, 1);
while(s.size()>0 && s[(int)s.size()-1]==' ' ||
s[(int)s.size()-1]=='\n') s.erase((int)s.size()-1, 1);
string res="";
for(int i=0; i
-
• Bài 4. Sửa lỗi dấu cách tổng quát
Sửa lỗi dấu cách tổng quát trong văn bản
NCT.FIT.HNUE 33
bool dau(char c)
{
return c=='.' || c==',' || c==':' || c=='!';
}
string fixDau(string s)
{
for(int i=0; i
-
• Bài 4. Sửa lỗi dấu cách tổng quát
Sửa lỗi dấu cách tổng quát trong văn bản
NCT.FIT.HNUE 34
void solve()
{
s=fix(s);
s=fixDau(s);
cout
-
• Bài 5. Một văn bản bị lỗi về viết hoa là văn bản có ít nhất một
trong các lỗi sau:
– Từ đầu câu không viết hoa
– Viết hoa trong câu (giả sử không xét các trường hợp đặc biệt)
• Hãy lập chương trình tạo và sử dụng một hàm sửa lỗi về viết hoa
trong văn bản.
• INPUT: S: Một đoạn văn bản có lỗi về viết hoa
• OUTPUT: S: Đoạn văn bản không có lỗi về viết hoa
Sửa lỗi viết hoa trong văn bản
NCT.FIT.HNUE 35
-
• Bài 5. Sửa lỗi không viết hoa đầu câu
Sửa lỗi viết hoa trong văn bản
NCT.FIT.HNUE 36
#include
using namespace std;
string c; string s;
string read_paragraph( istream &is )
{
string line, s="";
do
{
getline(is, line);
if(line!="")s+=line+'\n';
} while(line!="");
return s;
}
void enter()
{
s=read_paragraph(cin);
}
-
• Bài 5. Sửa lỗi không viết hoa đầu câu
Sửa lỗi viết hoa trong văn bản
NCT.FIT.HNUE 37
string fix( string s )
{
while(s.size()>0 && s[0]==' ') s.erase(0, 1);
while(s.size()>0 && s[(int)s.size()-1]==' ' ||
s[(int)s.size()-1]=='\n') s.erase((int)s.size()-1, 1);
string res="";
for(int i=0; i
-
• Bài 5. Sửa lỗi không viết hoa đầu câu
Sửa lỗi viết hoa trong văn bản
NCT.FIT.HNUE 38
bool dau(char c)
{
return c=='.' || c==',' || c==':' || c=='!';
}
string fixDau(string s)
{
for(int i=0; i
-
• Bài 5. Sửa lỗi không viết hoa đầu câu
Sửa lỗi viết hoa trong văn bản
NCT.FIT.HNUE 39
bool thuong(char c)
{
return 'a'
-
• Bài 5. Sửa lỗi không viết hoa đầu câu
Sửa lỗi viết hoa trong văn bản
NCT.FIT.HNUE 40
string fixHoa(string s)
{
if(thuong(s[0]))upcase(s[0]); //cout
-
• Bài 5. Sửa lỗi không viết hoa đầu câu
Sửa lỗi viết hoa trong văn bản
NCT.FIT.HNUE 41
void solve()
{
s=fix(s);
s=fixDau(s);
s=fixHoa(s);
cout
-
• Bài 6. Một văn bản bị lỗi văn phạm là văn bản có ít nhất một trong
các lỗi sau:
– Lỗi thừa dấu cách
– Lỗi về dấu ngăn cách
– Lỗi về viết hoa
• Hãy lập chương trình tạo và sử dụng một hoặc một số hàm sửa lỗi
văn phạm.
• INPUT: S: Một đoạn văn bản có lỗi về văn phạm
• OUTPUT: S: Đoạn văn bản không có lỗi về văn phạm
Sửa lỗi văn phạm trong văn bản
NCT.FIT.HNUE 42
• SV TỰ LÀM
-
• Cách khai báo, cách nhập
• Nguyên tắc xử lí từng phần tử của mảng (từng xâu)
4. Mảng các phần tử là xâu lí tự
-
• Hãy so sánh hai chương trình sau
Phân biệt mảng kí tự và mảng xâu kí tự
NCT.FIT.HNUE 44
Mảng kiểu kí tự Mảng của mảng kiểu kí tự
#include
#include
void main(){
char s[30];
cout
-
• Các thao tác cơ bản
Mảng các phần tử là “xâu kí tự”
NCT.FIT.HNUE 45
Khai báo
#include
#include
const int maxn = 100;
const int maxlen = 50;
char *s[maxn];
int n;
char tg[maxlen];
Nhập
coutn;
for(i=0;i
-
• Các thao tác cơ bản
Mảng các phần tử là “xâu kí tự”
NCT.FIT.HNUE 46
Xử lí (ví dụ)
- Đảo ngược danh sách, sử
dụng các phép gán
for(i=0,j=n-1; i
-
• Ví dụ 1: Nhập tên n sinh viên; Sắp xếp danh sách và in kết quả.
Mảng các phần tử là “xâu kí tự”
NCT.FIT.HNUE 47
#include
#include
#include
#include
#define maxn 100
#define maxlen 50
void main()
{ char *s[maxn];
char tg[maxlen];
int n;
int i,j;
coutn;
cin.ignore(1);
cout
-
• Ví dụ 2: Nhập họ tên n sinh viên; Chuyển chữ cái đầu của họ và
tên thành chữ in hoa;In kết quả.
Mảng các phần tử là “xâu kí tự”
NCT.FIT.HNUE 48
#include
#include
#include
#include
#define maxn 100
#define maxlen 50
void main()
{ char *s[maxn];
char tg[maxlen];
int n; int i,j;
coutn;
cin.clear();
cout
-
• Cách khai báo, định nghĩa hàm và gọi hàm
• Ví dụ minh họa
5. Truyền xâu kí tự vào hàm
-
• Các thao tác cơ bản
Truyền mảng “xâu kí tự” vào hàm
NCT.FIT.HNUE 50
Khai báo
const int maxn = 100;
const maxlen = 50;
char *s[maxn];
int n;
Viết hàm
kiểu_hàm tên_hàm (char *ps[ ], int &n) {
// Thân hàm:
// Phần tử thứ i của mảng là ps[i]
// ps[i] là một xâu ký tự }
Gọi hàm
nhap_ds(s, &n); in_ds(s, n);
dao_ds(s, n); in_ds(s, n);
-
• Ví dụ 1
Truyền mảng “xâu kí tự” vào hàm
NCT.FIT.HNUE 51
Viết chương trình minh họa sử dụng các hàm sau đây:
- Nhập một danh sách tên các mặt hàng
- In danh sách các tên mặt hàng.
- Tìm kiếm một mặt hàng biết tên mặt hàng nhập từ bàn
phím
-
• Ví dụ 1: Nhập tên n mặt hàng; In danh sách; Tìm kiếm
Truyền mảng “xâu kí tự” vào hàm
NCT.FIT.HNUE 52
#include
const int maxn= 100;
const int maxlen = 50;
void nhap_ds(char *ps[],int *n)
{ int i; char tg[maxlen];
cout*n;
cin.clear();
cout
-
• Ví dụ 1: Nhập tên n mặt hàng; In danh sách; Tìm kiếm (tiếp)
Truyền mảng “xâu kí tự” vào hàm
NCT.FIT.HNUE 53
int main()
{ char *s[maxn];
int n;
char tenh[maxlen];
nhap_ds(s,&n);
in_ds(s,n);
cout
-
• Ví dụ 2
Truyền mảng “xâu kí tự” vào hàm
NCT.FIT.HNUE 54
Xây dựng các hàm sau và minh họa việc sử dụng chúng
trong main()
- Nhập từ bàn phím tên của n SV
- Sắp xếp danh sách tên các SV theo thứ tự giảm dần
- In danh sách SV lên màn hình
-
• Ví dụ 2: Nhập danh sách tên SV, sắp xếp, in danh sách
Truyền mảng “xâu kí tự” vào hàm
NCT.FIT.HNUE 55
#include
-
• Ví dụ 2: Nhập danh sách tên SV, sắp xếp, in danh sách
Truyền mảng “xâu kí tự” vào hàm
NCT.FIT.HNUE 56
void main()
{ char *s[maxn];
int n;
nhap_ds(s,&n);
sapxep(s,n);
in_ds(s,n);
getch();
}
-
• Sử dụng file văn bản + Không dùng hàm
• Sử dụng file văn bản + Có dùng hàm
6. Truyền xâu kí tự vào hàm, sử dụng file
văn bản để vào ra dữ liệu kiểu xâu kí tự
-
Nguyên tắc chung
Dùng file đọc/ghi xâu, Không truyền xâu vào hàm
NCT.FIT.HNUE 58
Các lệnh đọc/ghi dữ liệu xâu, mỗi xâu một dòng
freopen(“Input_file_name.txt","r",stdin);
freopen(“Output_file_name.txt","w",stdout);
string s[100];
int n;
cin >> n; cin.ignore(1);
for(int i=1; i
-
Ví dụ: Nhập danh sách tên SV; Tìm một tên SV trong danh sách
Dùng file đọc/ghi xâu; Không truyền xâu vào hàm
NCT.FIT.HNUE 59
#include
#define size 100
using namespace std;
const int maxn= 100;
const int maxlen = 50;
int timthay(char *s,char *ps[],int n)
{ int i,j=0;
for(i=0;i> n; cin.ignore(1);
for(int i=1; i
-
Nguyên tắc chung
Dùng file đọc/ghi xâu; Có truyền xâu vào hàm
NCT.FIT.HNUE 60
Các lệnh đọc/ghi dữ liệu xâu, mỗi xâu một dòng
FILE *fi, *fo;
fi = fopen("file_name_Input.txt","r");
fo = fopen("file_name_Output.txt","w");
char s[maxlen];
fgets(s,maxlen,fi); fputs(s,fo);
Thư viện
#include
#include
#include
#include
#include
-
Ví dụ: Nhập danh sách tên SV; Tìm một tên SV trong danh sách
Dùng file đọc/ghi xâu; Có truyền xâu vào hàm
NCT.FIT.HNUE 61
#include
#define size 100
using namespace std;
const int maxn= 100;
const int maxlen = 50;
//========
void nhapds(FILE *fi,char *ps[],int &n)
{ int i; char tg[maxlen];
fgets(tg,maxlen,fi);n=atoi(tg);
for(i=0;i
-
Ví dụ: Nhập danh sách tên SV; Tìm một tên SV trong danh sách
Dùng file đọc/ghi xâu; Có truyền xâu vào hàm
NCT.FIT.HNUE 62
int main()
{ char *ds[maxn]; int n;
char tensv[maxlen];
FILE *finp, *fout;
//Nhap du lieu
finp = fopen("ds_sv.inp","r");
fout = fopen("ds_sv.out","w");
nhapds(finp,ds,n); inds(fout,ds,n);
//Tim kiem
strcpy(tensv,ds[n+1]);
fputs(".",fout);
if (timthay(tensv,ds,n))
fputs("\n co ten SV nay trong ds",fout);
else
fputs("\n khong co ten SV nay trong ds",fout);
return 0; }
ds_sv.inp
4
Tran Thanh Binh
Nguyen Thu Thao
Dang Thi Ha
Vu Ngoc Quang
.
Nguyen Thu Thao
-
Bài tập chương 3
-
• Bài 1
Truyền xâu vào hàm thông qua con trỏ;
Đọc/ghi dữ liệu với file văn bản
NCT.FIT.HNUE 64
Lập chương trình thực hiện các công việc sau:
- Nhập một danh sách tên các mặt hàng
- In danh sách các tên mặt hàng.
- Tìm kiếm một mặt hàng biết tên mặt hàng nhập từ bàn
phím
YÊU CẦU
1) Chương trình 1: Dùng hàm để truyền xâu kí tự vào
hàm; Nhập/xuất dữ liệu với bàn phím và màn hình
2) Chương trình 2: Dùng hàm để truyền xâu kí tự vào
hàm; Nhập/xuất dữ liệu với file văn bản
-
• Bài 2
Truyền xâu vào hàm thông qua con trỏ;
Đọc/ghi dữ liệu với file văn bản
NCT.FIT.HNUE 65
Lập chương trình thực hiện các công việc sau:
- Nhập từ bàn phím tên của n SV
- Sắp xếp danh sách tên các SV theo thứ tự giảm dần
- In danh sách SV lên màn hình
YÊU CẦU
1) Chương trình 1: Dùng hàm để truyền xâu kí tự vào
hàm; Nhập/xuất dữ liệu với bàn phím và màn hình
2) Chương trình 2: Dùng hàm để truyền xâu kí tự vào
hàm; Nhập/xuất dữ liệu với file văn bản
-
• Bài 3
Xử lí văn bản
NCT.FIT.HNUE 66
Hãy lập trình giải quyết bài toán sau đây:
Hai từ được gọi là angram với nhau nếu mỗi kí tự của từ này
cũng có mặt trong từ kia và hơn nữa số lượng từng loại kí tự
xuất hiện trong hai từ là bằng nhau. Ví dụ các từ trong từng
dòng dưới đây là những từ anagram của nhau:
• read, dear, dare
• tea, eat, ate
• bad, dab
• bale, able
Trên mỗi dòng sau, các từ không là anagram của nhau:
• feel, fell
• kitchen, chicken
Hãy kiểm tra và cho biết hai từ x và y nào đó được nhập từ
bàn phím có phải là anagram của nhau hay không?
-
• Bài 4
Xử lí văn bản
NCT.FIT.HNUE 67
Hãy lập trình giải quyết các bài toán sau đây:
Cho một dãy ngoặc đơn của một biểu thức nào đó được
nhập từ bàn phím. Hãy kiểm tra tính đúng đắn của biểu thức
chỉ xét về ngoặc đơn. Kết quả kiểm tra được thông báo lên
màn hình là một trong các từ sau đây:
• “Thiếu ngoặc trái”, ví dụ ( ) ( ( ) )) là một biểu thức thiếu
ngoặc trái
• “Thiếu ngoặc phải”, ví dụ (( ) ( ( ) ) là một biểu thức thiếu
ngoặc phải
• “Thiếu ngoặc trái và thiếu ngoặc phải”, ví dụ ( ) )( là một
biểu thức thiếu cả hai ngoặc trái và phải.
-
End of chapter 3
NCT.FIT.HNUE