#include <iostream>
#include <string>
#include <cctype>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;
void demKyTuTheoThuTu(const string& str) {
if (str.empty()) {
cout << "chuoi rong" << endl;
return;
}
// map để lưu trữ số lần xuất hiện của TỪNG ký tự (phân biệt hoa/thường)
map<char, int> dem;
// vector để lưu trữ thứ tự xuất hiện lần đầu của các ký tự
vector<char> thuTuXuatHien;
for (char c : str) {
// Kiểm tra nếu ký tự là alphabet hoặc là dấu cách
if (isalpha(c) || c == ' ') {
// Nếu ký tự này chưa được đếm (lần đầu xuất hiện)
if (dem.find(c) == dem.end()) {
thuTuXuatHien.push_back(c); // Ghi nhận thứ tự
}
// Tăng số lần đếm của ký tự đó (sẽ phân biệt 'A' và 'a')
dem[c]++;
}
}
// In kết quả theo thứ tự xuất hiện lần đầu
cout << "So lan xuat hien cua cac ky tu (phan biet hoa/thuong) theo thu tu: " << endl;
for (char kyTu : thuTuXuatHien) {
if (kyTu == ' ') {
cout << "Dau cach: " << dem[kyTu] << endl;
} else {
cout << kyTu << ": " << dem[kyTu] << endl;
}
}
}
int main() {
string input;
cout << "Nhap mot chuoi: ";
// Đảm bảo xóa bộ đệm nếu có input trước đó
if (cin.peek() == '\n') {
cin.ignore();
}
getline(cin, input);
demKyTuTheoThuTu(input);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8Y2N0eXBlPgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZvaWQgZGVtS3lUdVRoZW9UaHVUdShjb25zdCBzdHJpbmcmIHN0cikgewogICAgaWYgKHN0ci5lbXB0eSgpKSB7CiAgICAgICAgY291dCA8PCAiY2h1b2kgcm9uZyIgPDwgZW5kbDsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgLy8gbWFwIMSR4buDIGzGsHUgdHLhu68gc+G7kSBs4bqnbiB4deG6pXQgaGnhu4duIGPhu6dhIFThu6pORyBrw70gdOG7sSAocGjDom4gYmnhu4d0IGhvYS90aMaw4budbmcpCiAgICBtYXA8Y2hhciwgaW50PiBkZW07CiAgICAKICAgIC8vIHZlY3RvciDEkeG7gyBsxrB1IHRy4buvIHRo4bupIHThu7EgeHXhuqV0IGhp4buHbiBs4bqnbiDEkeG6p3UgY+G7p2EgY8OhYyBrw70gdOG7sQogICAgdmVjdG9yPGNoYXI+IHRodVR1WHVhdEhpZW47IAoKICAgIGZvciAoY2hhciBjIDogc3RyKSB7CiAgICAgICAgLy8gS2nhu4NtIHRyYSBu4bq/dSBrw70gdOG7sSBsw6AgYWxwaGFiZXQgaG/hurdjIGzDoCBk4bqldSBjw6FjaAogICAgICAgIGlmIChpc2FscGhhKGMpIHx8IGMgPT0gJyAnKSB7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBO4bq/dSBrw70gdOG7sSBuw6B5IGNoxrBhIMSRxrDhu6NjIMSR4bq/bSAobOG6p24gxJHhuqd1IHh14bqldCBoaeG7h24pCiAgICAgICAgICAgIGlmIChkZW0uZmluZChjKSA9PSBkZW0uZW5kKCkpIHsKICAgICAgICAgICAgICAgIHRodVR1WHVhdEhpZW4ucHVzaF9iYWNrKGMpOyAvLyBHaGkgbmjhuq1uIHRo4bupIHThu7EKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgLy8gVMSDbmcgc+G7kSBs4bqnbiDEkeG6v20gY+G7p2Ega8O9IHThu7EgxJHDsyAoc+G6vSBwaMOibiBiaeG7h3QgJ0EnIHbDoCAnYScpCiAgICAgICAgICAgIGRlbVtjXSsrOwogICAgICAgIH0KICAgIH0KCiAgICAvLyBJbiBr4bq/dCBxdeG6oyB0aGVvIHRo4bupIHThu7EgeHXhuqV0IGhp4buHbiBs4bqnbiDEkeG6p3UKICAgIGNvdXQgPDwgIlNvIGxhbiB4dWF0IGhpZW4gY3VhIGNhYyBreSB0dSAocGhhbiBiaWV0IGhvYS90aHVvbmcpIHRoZW8gdGh1IHR1OiAiIDw8IGVuZGw7CiAgICAKICAgIGZvciAoY2hhciBreVR1IDogdGh1VHVYdWF0SGllbikgewogICAgICAgIGlmIChreVR1ID09ICcgJykgewogICAgICAgICAgICBjb3V0IDw8ICJEYXUgY2FjaDogIiA8PCBkZW1ba3lUdV0gPDwgZW5kbDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb3V0IDw8IGt5VHUgPDwgIjogIiA8PCBkZW1ba3lUdV0gPDwgZW5kbDsKICAgICAgICB9CiAgICB9Cn0KCmludCBtYWluKCkgewogICAgc3RyaW5nIGlucHV0OwoKICAgIGNvdXQgPDwgIk5oYXAgbW90IGNodW9pOiAiOwogICAgLy8gxJDhuqNtIGLhuqNvIHjDs2EgYuG7mSDEkeG7h20gbuG6v3UgY8OzIGlucHV0IHRyxrDhu5tjIMSRw7MKICAgIGlmIChjaW4ucGVlaygpID09ICdcbicpIHsKICAgICAgICBjaW4uaWdub3JlKCk7CiAgICB9CiAgICBnZXRsaW5lKGNpbiwgaW5wdXQpOwoKICAgIGRlbUt5VHVUaGVvVGh1VHUoaW5wdXQpOwoKICAgIHJldHVybiAwOwp9Cg==