Rumah > pembangunan bahagian belakang > C++ > Gantikan semua konsonan dalam rentetan dengan vokal terdekat menggunakan program C++

Gantikan semua konsonan dalam rentetan dengan vokal terdekat menggunakan program C++

WBOY
Lepaskan: 2023-09-11 10:17:02
ke hadapan
978 orang telah melayarinya

Gantikan semua konsonan dalam rentetan dengan vokal terdekat menggunakan program C++

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
Salin selepas log masuk

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
Salin selepas log masuk

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.

Algoritma

  • 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.

Contoh

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;
}
Salin selepas log masuk

Output

“ibgshzjbsh”
“iaeuiuiaui”
Salin selepas log masuk

Contoh

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;
}
Salin selepas log masuk

Output

iaeuiuiaui
Salin selepas log masuk

Kesimpulan

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!

Label berkaitan:
sumber:tutorialspoint.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan