bir string cümlede kaç tane @ işareti var?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
kazimates
Üye
Mesajlar: 332
Kayıt: 01 Tem 2005 12:40
Konum: Kıbrıs
İletişim:

bir string cümlede kaç tane @ işareti var?

Mesaj gönderen kazimates »

merhabalar
bir string cümle düşünecek olursak ve bunun içerisinde kaç tane @ işareti olduğunu nasıl buluruz?
örnek : Kazim@ATES burada 1 adet @ işareti buldum diyebilmeli veya
Kazim@ATES@HAsan@ vs. burada ise 3 adet @ işareti buldum diyebilmeli.

tsk ederim.[/i]
ulu coder
Üye
Mesajlar: 838
Kayıt: 01 Nis 2006 06:46
Konum: Ankara

Mesaj gönderen ulu coder »

Kolay:

Kod: Tümünü seç

function KacTane(Str: String): Integer;
var
  i: Integer;
begin
  Result := 0;

  for i := 1 to length(Str) do //1'den String'in uzunluğuna kadar
    if Str[i] = '@' then  //i'ninci karakter '@' mi?
      Result := Result + 1;

  //İlginç, saymaya normalde hep 0'dan başlarız
  //String'in karakterlerine bakarken böyle değil..
end;//KacTane
'@'i de parametreye bağlamak lazım ama o zaman büyük-küçük harf durumu filan olacak, bu problem için boşuna çözümü yavaşlatacak...

Kolay gelsin.
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Selamlar,

ulucoder'in yazdığında ilgniç dediği konuya açıklık getireyim.

Pascal'dan gelen bir özelliktir bu, stringlerde ilk byte stringin size'ını verir.

Yani strDegisken[0] daime o stringin boyutunu verir. :)

Bu sebeple stringler 1'den başlar.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Kuri_YJ yazdı:Selamlar,

ulucoder'in yazdığında ilgniç dediği konuya açıklık getireyim.

Pascal'dan gelen bir özelliktir bu, stringlerde ilk byte stringin size'ını verir.

Yani strDegisken[0] daime o stringin boyutunu verir. :)

Bu sebeple stringler 1'den başlar.
Evet, String tiplerin Pascal'dan kalan özelliğidir ilk elemana 1'le erişmek. Sanırım buna uyum sağlamak için aynı gelenek sürdürülmüş. Bu noktada bir kaç ayrıntıya dikkat çekmek istiyorum.
-Pascal'daki string tipine karşılık Delphide ShortString tipi bulunmaktadır ve [0]. indisi o değerin uzunluğunu verir.
-Delphinin String tipinin her ne kadar ilk indis numarası 1 olsa da bilginin bittiği yerde 0 bilgisi vardır ve uzunluk hesaplamada bu değere kadar sayım yapılmalıdır. Zaten maksimum uzunluk sınırı da teorik olarak 255 Byte değil 2 GB'tır.
-Varsayılan değeri {$H+} veya {$LONGSTRINGS ON} olan bildirimi tersine yaparsak yaptığımız string tipli tanımların hepsi ShortString (yani Pascal String'i :wink:) olur. Yani {$H-} veya {$LONGSTRINGS OFF} bildirimlerinden biri yapılmışsa string tipler en fazla 255 karakter değer alabilir. Buna paralel olarak bilgi uzunluğunun ilk byte'ta tutulduğunu ve bir byte ile en fazla 255 değerinin temsil edildiğini de hatırlatırsam neden 255 karakter sınır olduğu anlaşılır. Ayrıca buna paralel olarak 2. maddede belirttiğim sayım da bu 255 sınırını aşmak için yapılır.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

sürüm 2

Mesaj gönderen ikutluay »

Kod: Tümünü seç

function KacTane(Str: String;ch:char): Integer;
var
  i: Integer;
begin
  Result := 0;

  for i := 1 to length(Str) do //1'den String'in uzunluğuna kadar
    if Str[i] = ch then  //i'ninci karakter '@' mi?
      Result := Result + 1;

end;//KacTane
kodda br değişiklik yaptım bu haliyle herhan bir karakteri sayar.

Kod: Tümünü seç

a:=kactane('bu bir deneme metnidir','a');
sonuç 0 gelmeli
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
ulu coder
Üye
Mesajlar: 838
Kayıt: 01 Nis 2006 06:46
Konum: Ankara

Mesaj gönderen ulu coder »

@Kuri_YJ ve @sabanakman, bilgiler için teşekkürler, hoş oldu : )

@ikutluay, '@'i de parametreye bağlamak lazım ama o zaman büyük-küçük harf durumu filan olacak, bu problem için boşuna çözümü yavaşlatacak... demiştim zaten ama aklıma case sensitive özelliği ekleyebileceğim ve bu çözümü yavaşlatmayacak bi fonksiyon geldi, onu da yazalım tam olsun di mi =)

Kod: Tümünü seç

function KacTane(Str: String; Ch: Char; CaseSensitive: Boolean);
  var
    i: Integer;
begin
  if not CaseSensitive then
  begin
    Str = AnsiUpperCase(Str);
    Ch = AnsiUpperCase(Ch);
  end;
  //Bilgisayara göre A, a farklı şeyler ama
  //ama biz aynı olsun isteyebiliriz

  Result := 0;

  for i := 1 to length(Str) do //1'den String'in uzunluğuna kadar
    if Str[i] = Ch then  //i'ninci karakter '@' mi?
      Result := Result + 1;
end;//KacTane
Yok mu arttıran :D

Kolay gelsin...
Cevapla