June 12

Merhaba,

Aslında D'de bu konuda çok olanak var. Burada hangisi iyi diye tartışabiliriz. Benim bulabildiğim 2 olanak var ve ilki std.array'deki split:

import std.array;
  int counter;
  foreach(n; str.split!isWhite)
  {
   //if(n.length > 0)/*
   if(!n.empty)//*/
    {
      n.writeln; //* 11 nonblank /
    } else {
      counter++;
    }
  }
  counter.writeln; //* 8 blank /

Yapmak istediğim, tüm görünmez karakterleri filitrelemek; buna boşluklar dahil. Ama yukarda görüleceği üzere (döndürülen bir dizge dizisi: string[]) dizide boş elemanlar da (bu aşağıda vereceğim örnekte 8), dolu olan istediklerim de var. İstersem, yukardaki gibi yeni bir döngüye sokarak 2 şekilde (1. if'in solundaki işaretleri kaldırıp geçiş yapın: toggle) filitreleyebilirim ama esnek olması yanında daha yavaş olur sanki...

Ne dersiniz şağıdaki daha iyi olabilir mi?

import std.algorithm;
import std.uni : isWhite;
import std.stdio;

void main()
{
  auto str = "\tBir Madde: \n"~
  "Buraya uzun bir ara       "~
  "ve belki biraz daha yazmak";

  str.splitter!isWhite.
  filter!(a => a != "").writeln;
}
June 12
On 6/12/21 12:51 AM, Salih Dincer wrote:

> import std.array;
>    int counter;
>    foreach(n; str.split!isWhite)

Galiba std.array.split "heveslidir". Duruma göre algorithm.splitter'dan daha uygun ama daha yavaş olabilir.

>    str.splitter!isWhite.
>    filter!(a => a != "").writeln;

Ben hemen hemen her zaman splitter'ı kullanıyorum. Son zamanlarda std.functional'daki 'not'tan da yararlandığım oldu:

  str.splitter!isWhite.
  filter!(not!empty).writeln;

Ali