fork download
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. #include <map>
  5. #include <sstream>
  6. #include <algorithm>
  7. #include <cctype>
  8. using namespace std;
  9.  
  10. class Kamus {
  11. private:
  12. map<string, vector<string> > data;
  13.  
  14. void tambahSatu(const string& kata, const string& sin) {
  15. if (kata == sin) return;
  16. vector<string>& daftar = data[kata];
  17. if (find(daftar.begin(), daftar.end(), sin) == daftar.end()) {
  18. daftar.push_back(sin);
  19. }
  20. }
  21.  
  22. public:
  23. void tambah(string kata, vector<string> sinonim) {
  24. for (size_t i = 0; i < sinonim.size(); i++) {
  25. tambahSatu(kata, sinonim[i]);
  26. tambahSatu(sinonim[i], kata);
  27. }
  28. }
  29.  
  30. vector<string> ambilSinonim(string kata) {
  31. map<string, vector<string> >::iterator it = data.find(kata);
  32. if (it == data.end()) return vector<string>();
  33. return it->second;
  34. }
  35. };
  36.  
  37. string keHurufKecil(string s) {
  38. transform(s.begin(), s.end(), s.begin(),
  39. [](unsigned char c) { return tolower(c); });
  40. return s;
  41. }
  42.  
  43. vector<string> pecahKata(string baris) {
  44. replace(baris.begin(), baris.end(), ',', ' ');
  45. istringstream iss(baris);
  46. vector<string> hasil;
  47. string token;
  48. while (iss >> token) hasil.push_back(keHurufKecil(token));
  49. return hasil;
  50. }
  51.  
  52. bool bacaKata(const string& prompt, string& kata) {
  53. string baris;
  54. cout << prompt;
  55. if (!getline(cin, baris)) return false;
  56. vector<string> k = pecahKata(baris);
  57. kata = k.empty() ? "" : k[0];
  58. return true;
  59. }
  60.  
  61. void cetak(const string& kata, const vector<string>& hasil) {
  62. cout << "Sinonim '" << kata << "': ";
  63. if (hasil.empty()) {
  64. cout << "null" << endl;
  65. return;
  66. }
  67. cout << "[";
  68. for (size_t i = 0; i < hasil.size(); i++) {
  69. cout << "'" << hasil[i] << "'";
  70. if (i + 1 < hasil.size()) cout << ", ";
  71. }
  72. cout << "]" << endl;
  73. }
  74.  
  75. void tampilMenu() {
  76. cout << "\n=== KAMUS SINONIM ===" << endl;
  77. cout << "1. Tambah kata dan sinonim" << endl;
  78. cout << "2. Cari sinonim sebuah kata" << endl;
  79. cout << "3. Keluar" << endl;
  80. cout << "Pilih menu (1-3): ";
  81. }
  82.  
  83. int main() {
  84. Kamus kamus;
  85. string pilihan;
  86.  
  87. while (true) {
  88. tampilMenu();
  89. if (!getline(cin, pilihan)) break;
  90.  
  91. if (pilihan == "1") {
  92. string kata;
  93. if (!bacaKata("Masukkan kata: ", kata)) break;
  94. if (kata.empty()) {
  95. cout << "Kata tidak boleh kosong." << endl;
  96. continue;
  97. }
  98.  
  99. string baris;
  100. cout << "Masukkan sinonim (pisahkan dengan spasi atau koma): ";
  101. if (!getline(cin, baris)) break;
  102. vector<string> sinonim = pecahKata(baris);
  103.  
  104. if (sinonim.empty()) {
  105. cout << "Minimal harus ada satu sinonim." << endl;
  106. continue;
  107. }
  108.  
  109. kamus.tambah(kata, sinonim);
  110. cout << "Berhasil menambahkan " << sinonim.size()
  111. << " sinonim untuk '" << kata << "'." << endl;
  112.  
  113. } else if (pilihan == "2") {
  114. string kata;
  115. if (!bacaKata("Masukkan kata yang dicari: ", kata)) break;
  116. if (kata.empty()) {
  117. cout << "Kata tidak boleh kosong." << endl;
  118. continue;
  119. }
  120. cetak(kata, kamus.ambilSinonim(kata));
  121.  
  122. } else if (pilihan == "3") {
  123. cout << "Terima kasih, program selesai." << endl;
  124. break;
  125.  
  126. } else {
  127. cout << "Pilihan tidak valid, masukkan 1, 2, atau 3." << endl;
  128. }
  129. }
  130.  
  131. return 0;
  132. }
Success #stdin #stdout 0s 5320KB
stdin
1
big
large, great
1
big
huge fat
1
huge
enormous gigantic
2
big
2
huge
2
gigantic
2
colossal
3
stdout
=== KAMUS SINONIM ===
1. Tambah kata dan sinonim
2. Cari sinonim sebuah kata
3. Keluar
Pilih menu (1-3): Masukkan kata: Masukkan sinonim (pisahkan dengan spasi atau koma): Berhasil menambahkan 2 sinonim untuk 'big'.

=== KAMUS SINONIM ===
1. Tambah kata dan sinonim
2. Cari sinonim sebuah kata
3. Keluar
Pilih menu (1-3): Masukkan kata: Masukkan sinonim (pisahkan dengan spasi atau koma): Berhasil menambahkan 2 sinonim untuk 'big'.

=== KAMUS SINONIM ===
1. Tambah kata dan sinonim
2. Cari sinonim sebuah kata
3. Keluar
Pilih menu (1-3): Masukkan kata: Masukkan sinonim (pisahkan dengan spasi atau koma): Berhasil menambahkan 2 sinonim untuk 'huge'.

=== KAMUS SINONIM ===
1. Tambah kata dan sinonim
2. Cari sinonim sebuah kata
3. Keluar
Pilih menu (1-3): Masukkan kata yang dicari: Sinonim 'big': ['large', 'great', 'huge', 'fat']

=== KAMUS SINONIM ===
1. Tambah kata dan sinonim
2. Cari sinonim sebuah kata
3. Keluar
Pilih menu (1-3): Masukkan kata yang dicari: Sinonim 'huge': ['big', 'enormous', 'gigantic']

=== KAMUS SINONIM ===
1. Tambah kata dan sinonim
2. Cari sinonim sebuah kata
3. Keluar
Pilih menu (1-3): Masukkan kata yang dicari: Sinonim 'gigantic': ['huge']

=== KAMUS SINONIM ===
1. Tambah kata dan sinonim
2. Cari sinonim sebuah kata
3. Keluar
Pilih menu (1-3): Masukkan kata yang dicari: Sinonim 'colossal': null

=== KAMUS SINONIM ===
1. Tambah kata dan sinonim
2. Cari sinonim sebuah kata
3. Keluar
Pilih menu (1-3): Terima kasih, program selesai.