Dalam dunia pengaturcaraan, terdapat banyak senario di mana kita benar-benar ingin mencari corak tertentu dalam teks yang lebih besar. Tugas biasa ialah mencari dan mencetak setiap rentetan dalam tatasusunan tertentu yang berlaku sebagai subrentetan dalam rentetan tertentu. Masalah yang kelihatan asas ini boleh diselesaikan menggunakan pelbagai kaedah, dan dalam artikel ini kita akan meneroka dua daripadanya. Kami memberikan penjelasan yang jelas tentang sintaks dan algoritma yang digunakan untuk setiap kaedah dan menyediakan dua contoh kod boleh laku yang lengkap.
Sebelum kami memperkenalkan kaedah, mari kita fahami sintaks yang akan kita gunakan untuk menyelesaikan masalah ini -
void printMatchingStrings(string array[], string text);
Untuk menyelesaikan masalah mencari dan mencetak semua rentetan yang berlaku sebagai subrentetan dalam rentetan tertentu daripada tatasusunan, kita boleh mengikuti algoritma langkah demi langkah berikut -
Mulakan vektor kosong untuk menyimpan rentetan yang sepadan.
Ulang setiap rentetan dalam tatasusunan.
Semak sama ada rentetan semasa ialah subrentetan teks yang diberikan.
Hipotesisnya ialah, tambahkan rentetan pada vektor rentetan yang sepadan.
Selepas melelaran semua rentetan, cetak vektor rentetan yang sepadan.
Dalam teknik ini kita akan menggunakan fungsi string.find() yang mengembalikan kedudukan substring dalam rentetan. Jika subrentetan tidak dijumpai, ia mengembalikan nilai khas yang dipanggil string::npos.
#include <iostream> #include <vector> #include <string> void printMatchingStrings(const std::string array[], const std::string& text, int arraySize) { std::vector<std::string> matchingStrings; for (int i = 0; i < arraySize; i++) { if (text.find(array[i]) != std::string::npos) { matchingStrings.push_back(array[i]); } } for (const std::string& match : matchingStrings) { std::cout << match << std::endl; } } int main() { const std::string array[] = { "apple", "banana", "orange", "pear" }; const std::string text = "I like to eat bananas and oranges."; int arraySize = sizeof(array) / sizeof(array[0]); printMatchingStrings(array, text, arraySize); return 0; }
banana orange
Ekspresi biasa menyediakan alat yang berkuasa untuk padanan corak dalam rentetan. Kita juga boleh menggunakannya untuk menyelesaikan masalah kita.
#include <iostream> #include <vector> #include <string> #include <regex> void printMatchingStrings(const std::string array[], const std::string& text, int arraySize) { std::vector<std::string> matchingStrings; for (int i = 0; i < arraySize; i++) { std::regex pattern(array[i]); if (std::regex_search(text, pattern)) { matchingStrings.push_back(array[i]); } } for (const std::string& match : matchingStrings) { std::cout << match << std::endl; } } int main() { const std::string array[] = { "apple", "banana", "orange", "pear" }; const std::string text = "I like to eat bananas and pear."; int arraySize = sizeof(array) / sizeof(array[0]); printMatchingStrings(array, text, arraySize); return 0; }
banana pear
Memilih antara dua kaedah bergantung pada keperluan masalah khusus anda−
Corak yang perlu dipadankan agak mudah.
Prestasi adalah isu kerana kaedah string.find() mungkin lebih pantas daripada ungkapan biasa untuk corak ringkas.
Anda lebih suka pelaksanaan yang lebih mudah tanpa memerlukan sintaks ungkapan biasa.
Corak yang hendak dipadankan adalah kompleks dan memerlukan keupayaan padanan corak lanjutan.
Fleksibiliti dan padanan corak yang berkuasa adalah penting.
Prestasi bukan faktor kritikal, atau kerumitan corak membenarkan penggunaan ungkapan biasa.
Dalam artikel ini, kami melihat dua cara unik untuk menangani masalah mencari dan mencetak kejadian subrentetan dalam tatasusunan dalam rentetan tertentu. Kaedah utama menggunakan fungsi string.find(), yang merupakan penyelesaian yang mudah dan mudah. Kaedah seterusnya mengeksploitasi kuasa ungkapan biasa untuk mengendalikan situasi padanan corak yang lebih kompleks. Bergantung pada keperluan masalah khusus anda, anda boleh memilih kaedah yang paling sesuai. Ingat bahawa padanan corak adalah tugas asas dalam pengaturcaraan, dan mempunyai pemahaman yang kukuh tentang pelbagai kaedah dan strategi boleh meningkatkan kebolehan menyelesaikan masalah anda dengan ketara. Jadi apabila anda menghadapi masalah yang serupa, anda akan mempunyai pengetahuan yang mencukupi untuk menanganinya dengan berkesan.
Atas ialah kandungan terperinci Cetak semua rentetan dalam tatasusunan tertentu yang berlaku sebagai subrentetan dalam rentetan tertentu menggunakan C++. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!