PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Anzahl bestimmter Buchstaben ermitteln



Antares
16.01.2007, 21:18
Sry, dass ich das Thema mal eben misbrauche, aber ich halte es nicht für sinnvoll für meine Frage ein neues zu eröffnen.

//Edit
Ich kann auch warten, bis das aktuelle Problem geklärt ist. ^_^

Ähm, ja.
Also ich möchte einen Zufallsgenerator erstellen, und der weitere Sinn ist auch völlig egal.
Jedenfalls möchte ich herausfinden, wie oft ein bestimmter Buchstabe vorhanden ist.
Jedem Buchstaben wird eine Zahl(Wert) zugeteilt und die Anzahl dieser Buchstaben mit der Zahl multipliziert.

Naja, und ich habs nicht so mit Schleifen.
Wie könnte ich den unteren Code durch Schleifen vereinfachen?



$counts=count_chars($string,0);
$acount=$counts[ord("a")];
$acount=$acount * 1;

$bcount=$counts[ord("b")];
$bcount=$bcount * 2;

$ccount=$counts[ord("c")];
$ccount=$ccount * 3;

$dcount=$counts[ord("d")];
$dcount=$dcount * 4;

$ecount=$counts[ord("e")];
$ecount=$ecount * 5;

$fcount=$counts[ord("f")];
$fcount=$fcount * 6;

$gcount=$counts[ord("g")];
$gcount=$gcount * 7;

$hcount=$counts[ord("h")];
$hcount=$hcount * 8;

$icount=$counts[ord("i")];
$icount=$icount * 9;

$jcount=$counts[ord("j")];
$jcount=$jcount * 10;

$kcount=$counts[ord("k")];
$kcount=$kcount * 11;

$lcount=$counts[ord("l")];
$lcount=$lcount * 12;

$mcount=$counts[ord("m")];
$mcount=$mcount * 13;

$ncount=$counts[ord("n")];
$ncount=$ncount * 14;

$ocount=$counts[ord("o")];
$ocount=$ocount * 15;

$pcount=$counts[ord("p")];
$pcount=$pcount * 16;

$qcount=$counts[ord("q")];
$qcount=$qcount * 17;

$rcount=$counts[ord("r")];
$rcount=$rcount * 18;

$scount=$counts[ord("s")];
$scount=$scount * 19;

$tcount=$counts[ord("t")];
$tcount=$tcount * 12;

$ucount=$counts[ord("u")];
$ucount=$ucount * 21;

$vcount=$counts[ord("v")];
$vcount=$vcount * 22;

$wcount=$counts[ord("w")];
$wcount=$wcount * 23;

$xcount=$counts[ord("x")];
$xcount=$xcount * 24;

$ycount=$counts[ord("y")];
$ycount=$ycount * 25;

$zcount=$counts[ord("z")];
$zcount=$zcount * 26;

$erg=$acount + $bcount + $ccount + $dcount + $ecount + $fcount + $gcount + $hcount + $icount + $jcount + $kcount + $lcount + $mcount + $ncount + $ocount + $pcount + $qcount + $rcount + $scount + $tcount + $ucount + $vcount + $wcount + $xcount + $ycount +$xcount + $zcount;


Also dein Problem geht ja wirklich am Thema vorbei, werde da mal Thementrennung beantragen ;)

Aber es ist möglich, ja.


<?php

$string = 'Abc';

$buchstaben = array ( 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' );

$count = count_chars ( $string, 0 );

$erg = 0;

foreach ( $buchstaben AS $position => $buchstabe ) {

if ( $position > 25 ) $position -= 26;

$erg += $count[ord($buchstabe)] * ( $position + 1 );
// +1 weil die erste Position eines Arrays 0 ist.

}

?>

Dir ist aber klar, dass du damit nur das vorkommen von Kleinbuchstaben zählst?

Wenn du Großbuchstaben auch beachten möchtest musst du das Array um diese erweitern und je nachdem, wenn du Groß- und Kleinbuchstaben gleichartig zählst vor der Addition zum Ergebnis die Zeile

if ( $position > 25 ) $position -= 26;
einfügen.

Ich habe leider nicht herausgefunden, welche Zeichentabelle verwendet wird. Ich glaube aber ISO-8859-1 ist bei PHP Standard. Multibytezeichen können den Zähler entsprechend verwirren. Aber wenn es dir nur um die 26 Buchstaben geht, brauchst du dich nicht sorgen.

Danke, mitaki. =)
Großbuchstaben spielen keine Rolle, das löse ich mit strtolower().


Achja und ich wäre mal dafür einen allgemeinen Fragethread zu eröffnen.
Viele Probleme können mit 2-3 Posts gelöst werden, und das Thema ist gegessen.
Da lohnt es sich nicht wirklich dafür ein neues Thema zu eröffnen.

Wäre eine Überlegung Wert, habe ohnehin schon die Moderation (NPC ;)) beauftragt, den Thread zu teilen, eventuell macht man so etwas daraus?


Wäre eine Überlegung Wert, habe ohnehin schon die Moderation (NPC ;)) beauftragt, den Thread zu teilen, eventuell macht man so etwas daraus?


Erledigt.
Das Thema könnte dann hier (http://www.multimediaxis.net/showthread.php?t=91104) hin geteilt werden.

Ich habe eigentlich gemeint, dass NPC das entscheiden sollte.

Aber gut, jetzt ist es gemacht und was noch kommt sehen wir dann ja.

NPC Fighter
17.01.2007, 14:58
Oh, hoppla. Da ist irgendwas bei schiefgegangen. Das ist jetzt natürlich blöd. Man denke sich einfach, wo ein neuer Post angefangen hat.

mitaki
17.01.2007, 20:32
Dich frage ich nichts mehr. XD

NPC Fighter
19.01.2007, 06:41
Kommt nicht wieder vor, versprochen. ;_;