Merhaba,
Aslında toplantı sırasında değindiğim için şuraya yazmak istedim ama kolaylık olsun diye her seferinde ayrı başlık açma geleneğine devam:
https://forum.dlang.org/post/nhauxkbjkqpiwjzmybhu@forum.dlang.org
Orada kısaca demiştim ki abeceyi bir diziye sıralı bir şekilde koyarsak basit bir indexOf() gerçeklemesi ile hızlı bir çözüm üretebiliriz. Hatta bunun sırasını kullanım sıklığına göre değiştirerek daha verimli çalıştırmak mümkün:
import std.string, std.stdio, std.uni;
void main()
{
auto message = "123 â şemsiye ve de ölçüsüz ip kullanılarak ağlayan çocuk istanbul'a getirilir."d;
//auto deneme = Dizgi!"tur"(message);
//auto abeceD = to!dstring(türkAlfabesi);
auto abece = " '’,,..00112233445566778899aAbBcCçÇdDeEfFgGğĞhHıIiİjJkKlLmMnNoOöÖpPqQrRsSşŞtTuUüÜvVwWxXyYzZ"d;
foreach(m; message) {
abece[abece.indexOf(m)+1].write;
}
writeln;
message.asUpperCase.writeln;
/* 2. satır sonuç çıkar, kod acehreli.alphabet
* ile uyumludur (gizlenen satır ve modül koda
* eklenmek şartıyla), ilk satırda Türkçe İ'le
* ilgili bir sorun yoktur, hatta indexOf() -1
* döndürmesi programın çökmesiyle sonuçlanmaz
* ama yerine boşluk döndürür: örn. â gibi ...
*/
}
Aksanlı harfleri ve diğer noktalama işaretlerini de eklerseniz kodun eksikliği giderilebilir. En güzel özelliği de mesela düz tırnak işareti yerine daha insancıl üst ayraç dönüşümünün burada uygulanabilmesi.
Gayet basit değil mi?