Dize Algoritmaları
Verimli şekilde arayın ve bölün
Dize Algoritmaları, CoddyKit'te ücretsiz bir C++ Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C++ Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C++ Academy kursu toplamda 4 dersten oluşur.
find ile Arama
find, bir alt dizenin dizinini veya bulunamıyorsa npos değerini döndürür; doğrudan görünüm üzerinde çalıştığı için kopyalama yapmaz.
#include <iostream>
#include <string_view>
int main() {
std::string_view sv = "key=value";
auto pos = sv.find('=');
std::cout << pos << "\n"; // 3
}npos'u Denetleme
Bir arama sonucunu dizin olarak kullanmadan önce her zaman std::string_view::npos ile karşılaştırın.
#include <iostream>
#include <string_view>
int main() {
std::string_view sv = "abc";
if (sv.find('z') == std::string_view::npos)
std::cout << "not found\n";
}Önek ve Sonek Denetimleri
starts_with ve ends_with (C++20), amacı açıkça belirtir ve elle alt dize karşılaştırmaları yapma gereğini ortadan kaldırır.
#include <iostream>
#include <string_view>
int main() {
std::string_view sv = "report.pdf";
std::cout << sv.starts_with("report") << "\n";
std::cout << sv.ends_with(".pdf") << "\n";
}Alan Çıkarma
Yeni dizeler için bellek ayırmadan bir anahtar/değer çiftini bölmek için find ile substr'ı birleştirin.
#include <iostream>
#include <string_view>
int main() {
std::string_view sv = "name=Ada";
auto eq = sv.find('=');
std::cout << sv.substr(0, eq) << " : " << sv.substr(eq + 1) << "\n";
}Ayırıcıya Göre Bölme
Ayırıcıyı art arda bulup alt görünümler alarak belirteçler arasında ilerleyebilirsiniz; her belirteç yalnızca bir görünümdür.
#include <iostream>
#include <string_view>
int main() {
std::string_view sv = "a,b,c";
size_t start = 0, pos;
while ((pos = sv.find(',', start)) != std::string_view::npos) {
std::cout << sv.substr(start, pos - start) << "\n";
start = pos + 1;
}
std::cout << sv.substr(start) << "\n";
}Sondan Arama
rfind geriye doğru arama yapar; dosya uzantısını veya son ayırıcıyı bulmak için kullanışlıdır.
#include <iostream>
#include <string_view>
int main() {
std::string_view path = "/usr/local/bin";
auto slash = path.rfind('/');
std::cout << path.substr(slash + 1) << "\n"; // bin
}Boşlukları Kırpma
Kopyalama yapmadan kırpma işlemi gerçekleştirmek için find_first_not_of ve find_last_not_of ile remove_prefix/remove_suffix kullanın.
#include <iostream>
#include <string_view>
int main() {
std::string_view sv = " hi ";
sv.remove_prefix(sv.find_first_not_of(" "));
sv.remove_suffix(sv.size() - 1 - sv.find_last_not_of(" "));
std::cout << "[" << sv << "]\n"; // [hi]
}Görünümleri Karşılaştırma
Görünümler sözlük sırasına göre karşılaştırma için == ve compare işlemlerini destekler; işaretçileri değil, karakterleri karşılaştırır.
#include <iostream>
#include <string_view>
int main() {
std::string_view a = "apple", b = "apple";
std::cout << (a == b) << "\n"; // 1
}Görülme Sayılarını Sayma
Her bulgunun sonrasına ilerleyen bir find döngüsü, bir karakterin veya alt dizenin kaç kez göründüğünü sayar.
#include <iostream>
#include <string_view>
int main() {
std::string_view sv = "mississippi";
int count = 0;
for (size_t p = sv.find('s'); p != std::string_view::npos; p = sv.find('s', p + 1)) ++count;
std::cout << count << "\n"; // 4
}Algoritmalar Bellek Ayırmadan Çalışır
Tüm bu işlemler aynı temel arabellek üzerinde çalışır. Belirteçler ve kırpılmış sonuçlar alt görünümlerdir; bir std::string oluşturana kadar yığın bellekte ayırma gerçekleşmez.
Yaşam Sürelerine Dikkat Edin
Bu algoritmaların ürettiği alt görünümler, özgün arabelleğin yaşam süresini paylaşır. Kaynak dizeden daha uzun süre var olmalarına izin vermeyin.
Hızlı Kontrol
string_view algoritmaları konusundaki anlayışınızı kontrol edin.
Özet
Görünümler üzerindeki dize algoritmalarını öğrendiniz:
find/rfind, konumları veyanposdeğerini döndürür.starts_with/ends_with, önekleri ve sonekleri denetler.- Bölme, kırpma ve belirteçlere ayırma işlemleri bellek ayırmadan alt görünümler üretir.
- Alt görünümler kaynakla aynı yaşam süresini paylaşır; geçersizleşmiş görünümlere dikkat edin.
Sıkça Sorulan Sorular
“Dize Algoritmaları” dersi ücretsiz mi?
Evet — “Dize Algoritmaları” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C++ Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C++ Academy kursu toplamda 4 dersten oluşur.
“Dize Algoritmaları” dersinde ne öğreneceğim?
Verimli şekilde arayın ve bölün C++ Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
C++ Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te C++ Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Dize Algoritmaları” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu C++ Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her C++ Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- string_view Neden Kullanılır
- Görünümler Oluşturma
- Sakıncalar ve Ömürler
- Dize Algoritmaları