fork download
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <ctype.h>
  4.  
  5. #define MAX 100
  6.  
  7. typedef struct {
  8. char simbol[3];
  9. int jumlah;
  10. } Unsur;
  11.  
  12. int ambilAngka(char *s, int *i) {
  13. int angka = 0;
  14. while (isdigit(s[*i])) {
  15. angka = angka * 10 + (s[*i] - '0');
  16. (*i)++;
  17. }
  18. if (angka == 0) angka = 1;
  19. return angka;
  20. }
  21.  
  22. int main() {
  23. char rumus[MAX];
  24. Unsur daftar[50];
  25. int count = 0;
  26.  
  27. printf("Masukkan rumus kimia: ");
  28. scanf("%s", rumus);
  29.  
  30. int len = strlen(rumus);
  31.  
  32. for (int i = 0; i < len;) {
  33. if (isupper(rumus[i])) {
  34. char simbol[3] = "";
  35. simbol[0] = rumus[i];
  36. int j = i + 1;
  37. if (j < len && islower(rumus[j])) {
  38. simbol[1] = rumus[j];
  39. j++;
  40. }
  41.  
  42. int angka = ambilAngka(rumus, &j);
  43.  
  44. // Cek apakah unsur sudah ada
  45. int ditemukan = 0;
  46. for (int k = 0; k < count; k++) {
  47. if (strcmp(daftar[k].simbol, simbol) == 0) {
  48. daftar[k].jumlah += angka;
  49. ditemukan = 1;
  50. break;
  51. }
  52. }
  53.  
  54. // Jika belum ada, tambahkan
  55. if (!ditemukan) {
  56. strcpy(daftar[count].simbol, simbol);
  57. daftar[count].jumlah = angka;
  58. count++;
  59. }
  60.  
  61. i = j;
  62. } else {
  63. i++;
  64. }
  65. }
  66.  
  67. // Cetak hasil
  68. for (int i = 0; i < count; i++) {
  69. printf("%s %d\n", daftar[i].simbol, daftar[i].jumlah);
  70. }
  71.  
  72. return 0;
  73. }
  74.  
Success #stdin #stdout 0.01s 5252KB
stdin
1 C 1 H 3 CI 1
stdout
Masukkan rumus kimia: