01/10/2018, 14:35
C++ Map, Tìm từ xuất hiện nhiều nhất trong File
e mới học C++ . Các anh c giúp e về cách sử dụng std:: map< string, int> để tìm ra từ xuất hiện nhiều nhất trong file text (cần xóa bỏ dấu câu và chuyển thành kí tự thường). e cảm ơn nhiều ạ!
Bài liên quan
C++ đời mới cho nó đẹp
http://codepad.org/durMtRcZ
m tự viết code đây ạ, cơ mà có hai chỗ chưa đc b xem giúp m với
viết 1 hàm bỏ dấu câu và chuyển thành chữ thường
std::string toLowerCaseWord(const std::string& token)
còn tìm từ xuất hiện nhiều nhất thì bạn loop qua cái
map
luôn:bình thường loop qua mảng bằng
for (int i = 0; i < n; ++i)
thì loop các phần tử trong map bằng cách
for (std::map<std::string, int>::iterator it = map.begin(); it != map.end(); ++it)
nếu thấy dài quá thì xài
for (auto it = map.begin(); it != map.end(); ++it)
it
có thể xem là “con trỏ” tới 1 cặp (key, value). Key trong map<string,int> là string, value là int. Lấy key thông qua gọiit->first
, lấy value thông quait->second
. Rồi từ đây tìm max dễ rồiM có viết hàm để chuyển thành kí tự thường và bỏ dấu câu rồi. Nhưng m đang mắc ở chỗ là m dùng std::transform m máy nó báo lỗi k debug đc . M mới học mà bài thầy bắt làm theo hướng vậy
std::string prepare(const std::string& s)
{
}
đây là hàm chuyển kí tự của m
std::transform(s.begin(), s.end(), std::back_inserter(result), tolower);
vậy mới đúng. Do
result
là chuỗi rỗng nênresult.begin()
ko xài được, phải xàistd::back_inserter(result)
cái dòng transform đó có thể viết lại là:
mới hoc mà đòi viết
std::transform
làm gì ~.~cái loại bỏ dấu câu cũng ko đúng nữa, coi lại cách sử dụng
string
với vòng lặp đidạ, ông thầy để hàm vậy ạ, m đọc trên mạng rồi đó ạ . cảm ơn a( bạn ) nhé
m đã chạy thử chương trình và thành công cảm ơn bạn lần nữa nhé