C++ ile En Uzun Tekrar Eden Alt Dize Bulma
Kullanıcının girdiği metindeki en uzun tekrar eden alt diziyi bulan C++ programı.
#include < iostream >
#include < string >
std::string FindLongestRepeatingSubstring(const std::string& str);
int CountOccurrences(const std::string& str, const std::string& subStr);
int main()
{
std::cout << "Metni girin: ";
std::string metin;
std::getline(std::cin, metin);
std::string enUzunAltDizi = FindLongestRepeatingSubstring(metin);
std::cout << "En uzun tekrar eden alt dize: " << enUzunAltDizi << std::endl;
return 0;
}
std::string FindLongestRepeatingSubstring(const std::string& str)
{
int len = str.length();
std::string enUzunAltDizi = "";
for (int i = 0; i < len; i++)
{
for (int j = i + 1; j < len; j++)
{
std::string altDizi = str.substr(i, j - i);
int tekrarSayisi = CountOccurrences(str, altDizi);
if (tekrarSayisi > 1 && altDizi.length() > enUzunAltDizi.length())
{
enUzunAltDizi = altDizi;
}
}
}
return enUzunAltDizi;
}
int CountOccurrences(const std::string& str, const std::string& subStr)
{
int count = 0;
int i = 0;
while ((i = str.find(subStr, i)) != std::string::npos)
{
i += subStr.length();
count++;
}
return count;
}
Giriş/Çıkış işlemleri için gerekli kütüphane
#include < iostream >
C++ ile String (metin) kullanacağız
#include < string >
C++ ile En uzun tekrar eden alt dizeyi bulan fonksiyon
std::string FindLongestRepeatingSubstring(const std::string& str);
C++ ile Alt dizenin metinde kaç kez tekrar ettiğini sayan fonksiyon
int CountOccurrences(const std::string& str, const std::string& subStr);
C++ ile Kullanıcıdan bir metin girmesi istenir
std::cout << "Metni girin: ";
std::string metin;
C++ ile Tüm satırı metin olarak alır
std::getline(std::cin, metin);
C++ ile En uzun tekrar eden alt dizeyi bulur
std::string enUzunAltDizi = FindLongestRepeatingSubstring(metin);
C++ ile Sonucu ekrana yazdırır
std::cout << "En uzun tekrar eden alt dize: " << enUzunAltDizi << std::endl;
C++ ile Programın başarıyla sonlandığını belirtir
return 0;
C++ ile En uzun tekrar eden alt dizeyi bulan fonksiyon
std::string FindLongestRepeatingSubstring(const std::string& str)
{
int len = str.length();
std::string enUzunAltDizi = "";
// İki döngü ile tüm alt dizi kombinasyonlarını dener ve en uzun tekrar eden alt dizeyi bulur
for (int i = 0; i < len; i++)
{
for (int j = i + 1; j < len; j++)
{
std::string altDizi = str.substr(i, j - i); // Alt dizeyi keser
int tekrarSayisi = CountOccurrences(str, altDizi); // Alt dizenin metinde kaç kez tekrar ettiğini sayar
// Alt dize en az iki kez tekrar ediyorsa ve uzunluğu en uzun bulunan alt dizeden daha büyükse, yeni en uzun alt dizeyi günceller
if (tekrarSayisi > 1 && altDizi.length() > enUzunAltDizi.length())
{
enUzunAltDizi = altDizi;
}
}
}
return enUzunAltDizi; // En uzun tekrar eden alt dizeyi geri döndürür
}
C++ ile Alt dizenin metinde kaç kez tekrar ettiğini sayan fonksiyon
int CountOccurrences(const std::string& str, const std::string& subStr)
{
int count = 0;
int i = 0;
// Alt dizenin metinde geçtiği her konumu bulur ve sayacı artırır
while ((i = str.find(subStr, i)) != std::string::npos)
{
i += subStr.length(); // Bir sonraki konumdan aramaya devam eder
count++; // Sayacı artırır
}
return count; // Alt dizenin metinde kaç kez tekrar ettiğini döndürür
}