26 Nisan 2011 Salı

C#`ta girilen metni ters çevirme. Döngüsüz ninja yolu.

Bugün Şeref Akyüz kendi blogunda “C sharp’ ta Girilen Metni Ters Çevirme" başlıklı bir yazı yayınladı. Orada foreach döngüsü kullanarak string`i char dizisine tersten atadı. O yol yeni başlayanlar için foreach döngüsü oğrenmekte yararlı olacağını inanıyorum.

Ancak artık her defa for döngüsü yazmaktan yorulmuş, daha kısa ve ifadeli yollar arayanlar için bir-iki çözüm var.

Bunlara ihtiyacınız olur diye, foreach ya for döngüsü kullanmadan, metni döngüsüz ters çevirme yolunu göstermek istedim.
Hem daha kısa, hem daha anlaşılır. Hatta, tek satırlık yolu da var.

For döngüsü kullanmadan metni ters çevirmenin iki yolu:

public static string TersCevir_Dongusuz(string s)
{
char[] temp = s.ToCharArray();
Array.Reverse(temp);
return new string(temp);
}

public static string TersCevir_Dongusuz_NinjaYolu(string s)
{
return new string(s.ToCharArray().Reverse().ToArray());
}

Dikkat! Ninja yolu ile gidebilmek için başta using System.Linq; eklemeniz gerekecek.
Niçin: Kullanılan “Reverse()” fonksiyonu Extension Methods kütüphanesinden olduğu için, normalde yok, ama Linq kütüphanesini eklediğimizde var oluyor. (Bunun nasıl edilebildiğini daha sonra anlatacağım)

Şimdi de girilen metni ters çeviren programı üç satırda yazabiliriz.

using System;
using System.Linq;

class Program
{
static void Main(string[] args)
{
string s = Console.ReadLine();
s = new string(s.ToCharArray().Reverse().ToArray());
Console.WriteLine(s);
}
}

İsteyen tek satırda da yazar. Hiç değişken kullanmadan : ).

using System;
using System.Linq;

class Program
{
static void Main()
{
Console.WriteLine(Console.ReadLine().ToCharArray().Reverse().ToArray());
}
}

 

Gelen defa dizide bir elemanın bulunduğunu kontrol etmenin tek satırlık yolu hakkında yazacağım. Yani, bir nevi, dizide tek satırda for döngüzüz arama.

2 yorum:

  1. eger string cok uzunsa ve bellege sigmiyorsa ne yaparsin ?
    what if the string is too large to fit in memory, what would you do ?

    YanıtlaSil
  2. Sanki Muhammet hoca ziyaret etmiş : ).

    YanıtlaSil