Giúp đỡ thuật toán tìm kiếm chuỗi trong mảng

đây là đề bài của em: Thư viện cần quản lí 3 loại thông tin gồm độc giả, sách và các phiếu mượn/trả sách. Thông tin thẻ độc giả cần quản lí bao gồm: mã độc giả, họ tên, CMND, ngày tháng năm sinh, giới tính, email, địa chỉ, ngày lập thẻ và ngày hết hạn của thẻ (48 tháng kể từ ngày lập thẻ). Chương trình có các chức năng sau: a. Xem danh sách độc giả trong thư viện b. Thêm độc giả c. Chỉnh sửa thông tin một độc giả d. Xóa thông tin một độc giả e. Tìm kiếm độc giả theo CMND f. Tìm kiếm sách theo họ tên

http://codepad.org/TOVXcG89
ai thông não giúp em cái thuật toán Tìm kiếm sách theo họ tên với ạ
all thanks.1 tuần em suy nghĩ bài này rồi nên mới mạo muội nhờ ac

Tìm kiếm sách theo họ tên là sao hả bạn?

1 Like

Thì là tim sách theo tên tác giả thôi, tìm kiêm theo tên thì thường là tìm kiếm gần đúng thì sẽ ra 1 danh sách kết quả. C, C++ có hỗ trợ hàm tìm kiếm từ trong chuổi mà.

2 Likes

vâng. cám ơn anh. nhưng em không muốn sữ dụng hàm có sẵn

ví dụ mình có 1 danh sách
rồi mình gọi hàm tìm kiếm theo tên. coi tên người đó có không, nếu có thì in ra các thông tin còn lại như cmnd, mã số, ngày sinh…

Nếu như danh sách của bạn sắp xếp theo thứ tự từ điển của tên thì bạn dùng tìm kiếm nhị phân, còn nếu danh sách của bạn lưu không theo thứ tự nào cả thì tìm kiếm tuần tự.

vâng em cũng hiểu điều đó, cái em chưa nghĩ ra là thuật toán ý anh ạ. em đã thử nhiều thuật toán rồi. có lẽ do kiến thức chưa được vững…tưởng chừng như là ra rồi.nhưng lại mắc lỗi không thể so sánh giữa 2 pointer khác loại 1 cái là *char , 1 cái là *THUVIEN. thực sự em cũng ko hiểu chỗ này, rõ ràng 2 cái đều có cùng 1 kiểu là con trỏ kiểu thư viện

HoTen là char còn tentimkiem là THUVIEN thì sao nó tìm được bạn?
trong c có hà so sánh 2 char bạn dùng để áp dụng vào xem

chao anh ! sao vay anh

chào anh. anh có thể fix dùm em lỗi này được ko ạ. em cũng hiểu lỗi như vậy. nhưng nếu em chuyển cái mãng từ THUVIEN thành char thì bị lỗi.hoặc đệ qua HoTen khai báo kiểu THUVIEN cũng bị lỗi. thực tình là em hiểu lỗi đó nhưng không biết cách fix

Code của bạn khá rối, mình đọc thôi cũng … rồi:
Theo mình thì hàm tìm theo tên chỉ cần n, con trỏ thư viện và tên cần tìm là được rồi

void timkiemten(int n, THUVIEN *pointer, char *tentimkiem)
{
  // Dòng này tùy vào hàm, nếu đã có con trỏ *tentimkiem thì bỏ nhập đi
  // printf("nhap ten ma ban muon tim kiem "); 
  for (int i = 0; i < n; i++)
  {
    if ((pointer + i)->HoTen == tentimkiem)
    {
      printf("%d", i);
    }
  }
}
1 Like

vâng cám ơn anh . để a thử.hình như cách này em có làm qua rồi. để e thử lại

chào anh

2 biến xuất ra được như nhau (abc) như ảnh. thế mà nó lại ko bằng nhau … em cũng chả hiểu nữa. nản thế không biết. và thế em đã bỏ cuộc ,em đã sử dụng hàm
hơi ức!! :frowning:

Máy tính của bạn không có nút print screen hử…

có bác. nhưng trong lúc đó. ko chụp được. bác muốn xem code ko em gửi ạ.
chán thật bác ạ. em sữ dụng hàm strcmp thì êm đẹp rồi. khổ cái ko muốn sữ dụng nó. muốn làm như cách này, mà xem ra trình độ còn kém quá

Dùng được hàm nào thì cứ dùng thôi. Không nên tránh né nó quá.

1 Like

vâng,em cám ơn rất nhiều…
em đóng topic tại đây nhé mọi người

thế sao ko mở source hàm này lên coi nó viết thế nào :v

e tự viết lại rồi anh

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?