30/09/2018, 16:02
Tìm kiếm tên trong danh sách
Em có 1 mảng string gồm danh sách các họ và tên, chẳng hạn như
string list[]={'Nguyen van A', 'Nguyen van B', 'Le Van A', 'Dao van A'}
Gợi ý giúp em ý tưởng để khi tìm kiếm tên A, thì nó in ra 3 cái tên Nguyen Van A, Le Van A, Dao Van A.
Em cảm ơn ạ
Bài liên quan
Em muốn dùng ngôn ngữ gì?
Em dùng C++ ạ.
Trong C++,
std::string
có hỗ trợ phương thứcfind
. Khi tìm kiếm, nếu tìm thấy thì phương thứcstring::find
sẽ trả về vị trí đầu tiên tìm thấy chuỗi. Nếu không tìm thấy thìstring::find
sẽ trả vềstd::string::npos
tương đương với -1.Em xem ví dụ dưới đây.
Có 1 trường hợp có thể xảy ra.
Ví dụ lúc gặp 1 thằng tên Nguyễn A B. Nhưng mình tìm những thằng tên A thì sao?. Nó vẫn in ra thằng nguyễn A B này?
Vậy phải làm sao kiểm tra A có ở cuối String đó hay không.
Khi đó mình sử dụng std::string::find_last_of để tìm vị trí xuất hiện cuối cùng của A. Xem nó có phải ở cuối chuỗi không. Trường hợp này phức tạp hơn, nên phải nghiên cứu sao cho phù hợp với bài toán của mình.
Cái này khó thật. Em có ý tưởng tách từng string trong list ra rồi kiểm tra từng string 1 mà còn khó hơn nữa :))).
Hehe,Em tìm ra cách rồi anh, tách ra từng string có chứa A rồi kiểm tra xem nó có ở cuối k?. Ở đây em lấy độ dài -1 vì là A. Em thay = Quan rồi trừ 4 vẫn đúng ^^
@ltd
Nhưng mà khổ cái phải kiểm tra từng ký tự nếu là Quân. -1 -2 -3 -4 lần lượt = n a u Q. haha.
làm sao kiểm tra
Thử với cái này được không @Is2IT
Đúng rồi anh ^^. Done! clos topic =)))
Xem lại vẫn không đủ anh ạ. Chắc vẫn phải kiểm tra hết đủ các chữ luôn.
Nếu list string là cái này.
Nó sẽ in ra hết các thằng có tận cùng là chữ “n”.
Ừm, a hiểu sai lệnh
find_last_of
lệnh này so sánh ký tự, không phải chuỗi.Vậy giờ em dùng
strtok
để tách chuỗi ra thành nhiều chuỗi nhỏ, rồi dùngstrcmp
để so sánh chuỗi cuối cùng(tức tên).Tách ra có vẻ nhanh hơn. Em làm cách khác, kiểm tra xem firstName ở vị trí nào.
Lúc trưa đi ngủ quên chưa up code. Anh @ltd xem đúng không.
Ẹc, quên chưa sửa chỗ find(“Van”) của anh Đạt =)). Done!