.NET Verificare se una stringa è palindroma

set 3rd, 2009 | Filed under .NET, C#, Snippet

Link sponsorizzati

Cosa significa che una stringa è palindroma? Cioè che letta al contrario da la stessa parola, cioè, ‘alla’ per esempio è una parola palindroma, per esempio.

Questo funzione ricorsiva in C# verifica se una stringa è palindroma o meno!

Link sponsorizzati

        bool palindrom(string s)
        {
            if (s.Length == 0 || s.Length == 1)
                return true;
            else
            {
                if (s[0] != s[s.Length - 1])
                    return false;
                else
                    return palindrom(s.Substring(1, s.Length - 2));
            }
        }

Vi spiego come funziona, allora, se la stringa è lunga 0 caratteri o 1 carattere, allora è palindroma, altrimenti, elimino due caratteri dalla stringa, il primo e l’ultimo, solo se sono uguali, e ricontrollo. Se sono diversi, allora la stringa non è palindroma.
Facciamo un esempio, con la parola alla

> passo 'alla' alla funzione
a è uguale ad a, quindi passo ll
l è uguale ad l, quindi passo la stringa vuota
la stringa vuota mi torna true

con una parola non palindroma, ad esempio, allora

> passo 'allora' alla funzione
a è uguale ad a, quindi passo 'llor'
l è diverso da r, quindi torno false

Il concetto di base è molto semplice. La funzione, possiamo anche utilizzarla con un numero, oltre che con una stringa, come facciamo? Beh… leggiamo il numero e lo trasformiamo in una stringa

int q=101;
MessageBox.Show(palindrom(q.ToString()).ToString());

Il concetto della stringa palindroma è sempre lo stesso!

Il codice è facile, e si può modificare per farlo funzionare anche con Visual Basic .NET.

Link sponsorizzati

Condividi l'articolo

Post correlati:

Tags: , ,
  1. Frafra
    set 12th, 2009 at 01:20

    Per onor di cronaca, in Python:
    palindrom = lambda s: True if s == s[::-1] else False
    In C comunque pare più chiaro grazie a strrev:
    http://www.laynetworks.com/C%20Program_Palindrome.htm
    Java & Ruby:
    http://moose56.com/blog/2008/01/24/palindrome-java-ruby/

    La cosa buffa è che spesso esistono metodi molto semplici per fare il reverse, mi chiedevo se in C# esistesse qualcosa di analogo, dato che è presente anche in altri linguaggi.

    Spero di non essere OT, ma i parallelismi tra linguaggi mi affascinano :D

  2. codesnippet
    set 12th, 2009 at 18:57

    No no, tranquillo non sei OT. Tanto per mostrare un metodo alternativo si potrebbe usare una cosa di questo tipo:

    public string reverse(string s)
        {
            char[] a = s.ToCharArray();
            Array.Reverse(a);
            return new string(a);
        }

    La classe string non presenta un metodo suo per il reverse, in quel modo aggiri la cosa.

    Io ho adottato quel metodo perchè mi piace la ricorsione, come puoi vedere è tutto abbastanza semplice e lineare. Ovviamente questo non esclude soluzioni alternative ;)