code-neon

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
}