code-neon

C++ ile Anagram Bulma Programı

Kullanıcının girdiği metindeki harflerin tüm anagramlarını bulan C++ programı. Dikkat ! uzun bir metin girmemeniz tavsiye edilir.

#include < iostream > 

#include < string >  

#include < vector >   

void FindAnagrams(const std::string& metin,
 std::string anagram, std::vector < bool > & kullanilanHarfler,
  std::vector < std::string > & anagramlar);

int main()
{
    std::cout << "Metni girin: "; 
    std::string metin;

    std::getline(std::cin, metin); 

    std::vector < std::string > anagramlar; 

    std::vector < bool > kullanilanHarfler(metin.length(), false); 

    FindAnagrams(metin, "", kullanilanHarfler, anagramlar); 

    std::cout << "Tum anagramlar:" << std::endl;
    for (const auto& anagram : anagramlar)
    {
        std::cout << anagram << std::endl;
    }

    return 0; 
}

void FindAnagrams(const std::string& metin, std::string anagram, std::vector < bool > & kullanilanHarfler, std::vector < std::string > & anagramlar)
{
    if (anagram.length() == metin.length())
    {
        anagramlar.push_back(anagram); 
        return;
    }
    for (size_t i = 0; i < metin.length(); i++)
    {
        if (!kullanilanHarfler[i])
        {
            kullanilanHarfler[i] = true; 
            FindAnagrams(metin, anagram + metin[i], kullanilanHarfler, anagramlar); 
            kullanilanHarfler[i] = false; 
        }
    }
}

Giriş/Çıkış işlemleri için gerekli kütüphane

#include < iostream > 

C++ ile String (metin) kullanacağız

#include < string >  

C++ ile Vektör (vector) kullanacağız

#include < vector >   

C++ ile Anagramları bulan yardımcı fonksiyon (recursive)

void FindAnagrams(const std::string& metin,
 std::string anagram, std::vector < bool > & kullanilanHarfler,
  std::vector < std::string > & anagramlar);

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 Tüm anagramları tutacak bir vektör oluşturulur

    std::vector < std::string > anagramlar; 

C++ ile Kullanılan harfleri takip etmek için bir vektör oluşturulur

    std::vector < bool > kullanilanHarfler(metin.length(), false); 

C++ ile Anagramları oluşturan fonksiyon çağrılır

    FindAnagrams(metin, "", kullanilanHarfler, anagramlar); 

C++ ile Her bir anagramı ekrana yazdırır

    std::cout << "Tum anagramlar:" << std::endl;
    for (const auto& anagram : anagramlar)
    {
        std::cout << anagram << std::endl;
    }

C++ ile Programın başarıyla sonlandığını belirtir

    return 0; 

C++ ile Anagramları bulan yardımcı fonksiyon (recursive)

void FindAnagrams(const std::string& metin, std::string anagram, std::vector < bool > & kullanilanHarfler, std::vector < std::string > & anagramlar)
{
    if (anagram.length() == metin.length())
    {
        anagramlar.push_back(anagram); // Eğer geçerli anagram uzunluğu, metin uzunluğuna eşitse, bu bir anagramdır ve vektöre eklenir
        return;
    }
    // Metindeki her harfi teker teker kullanarak anagramları oluşturur
    for (size_t i = 0; i < metin.length(); i++)
    {
        if (!kullanilanHarfler[i])
        {
            kullanilanHarfler[i] = true; // Harf kullanıldı olarak işaretlenir
            FindAnagrams(metin, anagram + metin[i], kullanilanHarfler, anagramlar); // Rekürsif olarak diğer anagramları oluşturmak için fonksiyon tekrar çağrılır
            kullanilanHarfler[i] = false; // Harf kullanılmadı olarak işaretlenir (backtracking)
        }
    }
}