1. Trang chủ
  2. » Công Nghệ Thông Tin

bài giảng chuối và bài toán xử lý chuỗi lập trình

29 812 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 29
Dung lượng 1,12 MB

Nội dung

bài viết trình bày các kiến thức như Trình bày được chuỗi là gì ,Trình bày được nguyên tắc kết thúc của chuỗi ,Áp dụng được các bài toán thường gặp trong xử lý chuỗi ,Đếm số ký tự trong chuỗi ,So sánh hai chuỗi Copy chuỗi ,Loại bỏ ký tự trong chuỗi,Phân rã chuỗi,hi vọng những kiến thức này sẽ trợ giúp bạn tốt cho học tập

Trang 1

Chuỗi (string) và các bài toán xử lý chuỗi

Trang 2

Người học sẽ đạt được

Trình bày được chuỗi là gì

Trình bày được nguyên tắc kết thúc của chuỗi

Áp dụng được các bài toán thường gặp trong xử lý chuỗi:

Trang 3

Khái niệm về Chuỗi

Là mảng một chiều của các ký tự (loại char)

Ví dụ:

char hoten[20] = “Nguyen Thi A”;

char ngaysinh[20] = “20/03/1992”;

Ký tự trong chuỗi được truy cập như là phần tử của mảng

Hoten[0] = ‘N’; Hoten[1] = ‘g’; Hoten[11] = ‘A’;

ngaysinh[0] = ‘2’; ngaysinh[2] = ‘/’;

Trang 4

ký tự ‘\0’ thường được dùng để phát hiện sự kết thúc của chuỗi

Lưu ý: ‘a’ và “a” hoàn toàn khác nhau

‘a’ là 1 ký tự

“a” là 1 chuỗi có 2 ký tự ‘a’ và ‘\0’

Trang 5

Giả sử khai báo: char S[80];

• Hàm scanf không nhập chuỗi có khoảng trắng được

• Để nhập chuỗi có khoảng trắng ta dùng hàm gets

• Nếu vùng đệm keyboard có dữ liệu thì dữ liệu sẽ chuyển vào biến

• Để nhập một chuỗi mới chúng ta phải xoá bộ đệm keyboard bằng hàm fflush(stdin)

Nhập/xuất chuỗi

Trang 6

printf("\nChuoi vua nhap: %s", S);

printf("\nNhap chuoi bang ham gets");

Trang 7

Chuỗi là một mảng các ký tự Vì thế chúng ta có thể truy xuất vào phần tử ký tự của nó bằng chỉ số.

i++;

} printf("Chuoi vua nhap duoc viet hoa:");

puts(S);

getch();

Nhập 1 chuỗi rồi đổi chuỗi

đó ra chữ hoa

Truy xuất từng ký tự của chuỗi

Trang 8

Nếu n < 0 thì s1 < s2

(So sánh dựa vào bảng mã ASCII)

Một số hàm về chuỗi

Trang 9

strcpy(đích, nguồn)

Chép chuỗi nguồn vào chuỗi đích (gán chuỗi)

Ví dụ : strcpy(ten, “Nguyen Van A”);  ten = Nguyen Van A

Trang 11

VD 1: truy cập ký tự trong chuỗi

Bài toán: nhập tên và xuất tên in ngược

BEGIN

Input: chuỗi tên

Output: chuỗi tên in ngược

Trang 12

VD 1: truy cập ký tự trong chuỗi

#include <stdio.h> /* khai báo thư viện cần thiết */

// 2 xử lý chuỗi: copy ngược các ký tự

for(j=0, i=strlen(name)-1; i>=0; i , j++ ) opname[j] = name[i];

Trang 13

VD 1: truy cập ký tự trong chuỗi

// 3 Xuất chuỗi

printf("Hello, %s Nice to meet you!\n", name);

printf("Your name in backward: %s\n",opname);

getch();

return 0;

}

Trang 14

VD 2: So sánh chuỗi

Bài toán: tương tự chức năng C43 course work

Yêu cầu: Liệt kê tất cả thông tin của khách hàng có tên trong file input.txt.

Input : khachhang.txt, input.txt.

input.txt chứa các chuỗi ký tự là HoTenKH.

Output: output.txt.

Trang 15

VD 2: So sánh chuỗi

Giải thuật:

1 Đọc dữ liệu từ file và nhập vào mảng

1.1 Mở file input.txt, khachhang.txt, output.txt

1.2 Đọc dữ liệu từ file input.txt, khachhang.txt và nhập dữ liệu vào mảng

1.3 Loại bỏ các khoảng trắng của tên

1.3.1 xóa khoảng trắng khúc đầu của chuỗi

1.3.2 xóa khoảng trắng khúc cuối của chuỗi

1.3.3 thay khoảng trắng giữa các từ bằng 1 ' '

– So sánh tên

Cho mỗi tên IP trong input.txt

Cho mỗi tên KH trong khachhang.txt

 So sánh tên IP và tên KH

» Nếu giống nhau thì xuất tất cả thông tin KH

» Còn không xử lý tiếp

Trang 17

FILE *fin = fopen("input.txt","rt");

FILE *fout = fopen("output.txt","wt");

if(!fkh || !fin || !fout) /* kiểm tra các file được mở OK */

trình */

// fcloseall();

return -1;

}

Trang 19

} getch();

return 0;

}

Trang 20

VD 2: So sánh chuỗi

void XuLyTen(char s[])

{

int len=strlen(s);

int i=0, cuoitu;

// 1.3.1 xoa khoang trang khuc dau cua chuoi

while( i < len && (s[i] == '\t’ || s[i] == '\n’ || s[i] == ' ') ) i++;

Trang 21

VD 2: So sánh chuỗi

// 1.3.3 thay khoang trang giua cac tu bang 1 ' '

for( i=0; i<len; i++)

Trang 22

VD 3: phân rã chuỗi

Bài toán: tương tự chức năng C32 course work

Yêu cầu: so sánh tuổi của 2 ngày sinh lưu dạng chuỗi Input : hai ngày sinh

Output: xuất theo tuổi tăng dần.

Trang 26

VD 3: phân rã chuỗi

// 4 so sánh 2 tuổi và xuất theo tuổi tăng dần

diff = 365*(ns_s1.nam - ns_s2.nam) + 31*(ns_s1.thang -

ns_s2.thang) + ns_s1.ngay - ns_s2.ngay;

Trang 27

int top, seek;

for (top = 0; top < num-1; top++)

for (seek = top + 1; seek < num; seek++)

Trang 28

Kết luận

Chuỗi là mảng một chiều của các ký tự (loại char)

Xử lý chuỗi giống như xử lý mảng dữ liệu 1 chiều Chỉ 1 điều khác biệt:

 Chuỗi kết thúc với ‘\0’ hay NULL

Quy các bài toán xử lý chuổi về các bài toán nhỏ nêu ra trong các ví dụ

Trang 29

1 Viết chương trình nhập họ tên của một người rồi in ra màn

hình

2 Viết chương trình nhập vào một chuỗi, rồi in các ký tự của

chuỗi ra màn hình (mỗi ký tự là 1 hàng)

3 Viết chương trình nhập một chuỗi, hãy cho biết chuỗi đó có

tất cả bao nhiêu ký tự, số ký tự khoảng trắng

4 Nhập vào một chuỗi, hãy in ngược chuỗi đã nhập

5 Nhập họ tên sinh viên rồi in ra tên viết tắt của sinh viên đó

Ví dụ nhập : Nguyen Thi Lan Anh  NTLA

6 Nhập họ tên của giáo viên rồi in ra địa chỉ email của giáo

viên đó Ví dụ nhập : Nguyen Van Hung 

hung.nguyenvan@hoasen.edu.vn

7 Viết chương trình nhập họ tên, mã SV In ra địa chỉ email

của mình như trường Đại học Hoa sen đã cấp cho mình.

Bài tập điểm cộng về nhà

Ngày đăng: 17/06/2014, 15:04

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w