Kaedah ini bertujuan untuk menggantikan rentetan konsonan dengan vokal terdekat dalam abjad (juga dikenali sebagai huruf Latin huruf kecil). Jika dua vokal adalah sama rapat, kita boleh menggantikannya dengan vokal pertama dalam huruf tersebut.
Mari kita lihat beberapa senario input -
Andaikan kita mempunyai rentetan, seperti "ebgkjasjd", kini kita perlu menggantikan semua kemunculan konsonan dalam rentetan itu dengan vokal terdekat.
Input = "ebgkjasjd"; Result = ebgkjasjd eaeiiauie
Ganti unsur 'b' dengan 'a' kerana ia adalah vokal terdekat. Kita boleh menggantikan elemen 'g' dengan 'e' atau 'i' kerana kedua-duanya sama-sama terbaharu, tetapi kami memilih untuk menggantikannya dengan 'e' memandangkan ia datang dahulu. Perkara yang sama berlaku untuk semua elemen lain dalam rentetan.
Andaikan jika rentetan input tidak mengandungi sebarang vokal, sebagai contoh, pertimbangkan rentetan: "sdfhgtykl", output yang terhasil ialah -
Input = "sdfhgtykl"; Result = sdfhgtykl ueeieuuii
Untuk unsur pertama 's', vokal 'u' adalah yang paling hampir, jadi gantikan 's' dengan 'u'. Seperti semua elemen lain dalam tatasusunan, ia adalah konsonan. Keadaan ini juga menghasilkan kerumitan kaedah terburuk.
Lintas rentetan input bermula dari indeks permulaan.
Jika konsonan ditemui, bilangan huruf daripada konsonan itu kepada dua vokal terdekat di kiri dan kanan akan dikira. Pilih vokal dengan huruf yang lebih sedikit.
Proses ini akan diulang sehingga semua konsonan dalam rentetan telah dilalui.
Output yang diperolehi ialah rentetan yang diganti.
Berikut ialah kod yang dilaksanakan dalam C++ untuk menggantikan semua konsonan dalam rentetan dengan vokal terdekat dalam abjad -
#include <iostream> using namespace std; void solve(string& s) { for(char &ch : s) { if(ch>'a' && ch<'e') { if(ch-'a' <= 'e'-ch) ch='a'; else ch='e'; } else if(ch>'e' && ch<'i') { if(ch-'e' <= 'i'-ch) ch='e'; else ch='i'; } else if(ch>'i' && ch<'o') { if(ch-'i' <= 'o'-ch) ch='i'; else ch='o'; } else if(ch>'o' && ch<'u') { if(ch-'o' <= 'u'-ch) ch='o'; else ch='u'; } else if(ch>'u') { ch = 'u'; } } } int main() { string s = "ibgshzjbsh"; cout << s << "\n"; solve(s); cout << s; return 0; }
“ibgshzjbsh” “iaeuiuiaui”
Walau bagaimanapun, pendekatan yang lebih baik ialah menggunakan tatasusunan dan menyimpan jawapan aksara yang paling hampir untuk setiap aksara dan bukannya menggunakan banyak syarat if-else.
#include <iostream> #include <vector> using namespace std; string solve(string s) { string hash = "aaaeeeeiiiiioooooouuuuuuuu"; for (int i=0;i<s.size();i++) { s[i] = hash[s[i]-'a']; } return s; } int main() { string s = "ibgshzjbsh"; cout << solve(s); return 0; }
iaeuiuiaui
Kita boleh menggantikan elemen dengan mencari dan menggantikannya dengan watak yang paling hampir. Kerumitan masa melintasi rentetan ialah O(n). Kaedah kedua lebih mudah difahami dan dikodkan, dan kurang menyusahkan. Kerumitan masa juga O(n) kerana kita hanya mengulangi rentetan sekali sahaja.
Atas ialah kandungan terperinci Gantikan semua konsonan dalam rentetan dengan vokal terdekat menggunakan program C++. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!