#include <iostream>
#include <string>
#include <cctype>
#include <unordered_map>
using namespace std;
// Fungsi untuk memeriksa apakah sebuah karakter adalah angka
bool isDigit(char c) {
return c >= '0' && c <= '9';
}
// Fungsi untuk memeriksa apakah sebuah karakter adalah huruf kapital
bool isCapital(char c) {
return c >= 'A' && c <= 'Z';
}
// Fungsi utama untuk menghitung atom
unordered_map<char, int> hitungAtom(const string& senyawa) {
unordered_map<char, int> jumlahAtom;
int n = senyawa.length();
int i = 0;
while (i < n) {
// Cek apakah karakter adalah huruf kapital (awal unsur)
if (isCapital(senyawa[i])) {
char unsur = senyawa[i];
i++;
// Cek apakah ada huruf kecil setelah huruf kapital (misalnya H2O, bukan H2o)
while (i < n && islower(senyawa[i])) {
i++; // Abaikan huruf kecil, karena hanya huruf kapital yang mewakili unsur
}
// Cek apakah ada angka setelah unsur
int jumlah = 0;
if (i < n && isDigit(senyawa[i])) {
while (i < n && isDigit(senyawa[i])) {
jumlah = jumlah * 10 + (senyawa[i] - '0');
i++;
}
} else {
jumlah = 1; // Jika tidak ada angka, berarti hanya ada 1 atom
}
jumlahAtom[unsur] += jumlah;
} else {
i++; // Abaikan karakter yang tidak dikenali
}
}
return jumlahAtom;
}
int main() {
string rumus;
cout << "Masukkan rumus kimia (contoh: H2O, C6H12O6): ";
cin >> rumus;
unordered_map<char, int> hasil = hitungAtom(rumus);
cout << "\nJumlah atom dalam senyawa " << rumus << ":" << endl;
for (auto const& [unsur, jumlah] : hasil) {
cout << " " << unsur << ": " << jumlah << endl;
}
return 0;
}