Prebrojavanje reci u stringu

Hvala na pomoci...

Ali meni treba otprilike ovako:

Znaci, zadatak glasi: probrojati sve reci u stringu i odstampati njihov broj...

Ovo što si ti napisao nije funkcija nego petlja. Funkcija koju sam ti dao upravo radi ono što ti treba. Funkcija explode pretvara string u array i funkcijom count prebrojavamo koliko array ima elemenata tj koliko string ima reči.
Sa datim stringom iz primera štampa se broj 5.
 
Ako uopstimo ovo i pretpostavimo da je separator reci bilo sta sto nije slovo abecede, moglo bi ovako:

Kod:
[COLOR="#0000CD"]function[/COLOR] izbroj_reci([COLOR="#FF0000"]$str[/COLOR])
{
    $separator = [COLOR="#EE82EE"]TRUE[/COLOR];
    $brojac = [COLOR="#EE82EE"]0[/COLOR];
    $len = [COLOR="#800080"]strlen[/COLOR]([COLOR="#FF0000"]$str[/COLOR])

    [COLOR="#0000CD"]for[/COLOR]($i = [COLOR="#EE82EE"]0[/COLOR]; $i < $len; $i++)
    {
        [COLOR="#0000CD"]if[/COLOR]($separator && ( ([COLOR="#FF0000"]$str[/COLOR][$i] >= [COLOR="#EE82EE"]'a'[/COLOR] && [COLOR="#FF0000"]$str[/COLOR][$i] <= [COLOR="#EE82EE"]'z'[/COLOR]) || ([COLOR="#FF0000"]$str[/COLOR][$i] >= [COLOR="#EE82EE"]'A'[/COLOR] && [COLOR="#FF0000"]$str[/COLOR][$i] <= [COLOR="#EE82EE"]'Z'[/COLOR]) ) )
        {
            $brojac++;
            $separator = [COLOR="#EE82EE"]FALSE[/COLOR];
        }  
        [COLOR="#0000CD"]else[/COLOR]
            $separator = [COLOR="#EE82EE"]TRUE[/COLOR];
    }
    [COLOR="#0000CD"]return[/COLOR] $brojac;
}
 
Poslednja izmena:
Ako uopstimo ovo i pretpostavimo da je separator reci bilo sta sto nije slovo abecede, moglo bi ovako:

Kod:
[COLOR="#0000CD"]function[/COLOR] izbroj_reci([COLOR="#FF0000"]$str[/COLOR])
{
    $separator = [COLOR="#EE82EE"]TRUE[/COLOR];
    $brojac = [COLOR="#EE82EE"]0[/COLOR];
    $len = [COLOR="#800080"]strlen[/COLOR]([COLOR="#FF0000"]$str[/COLOR])

    [COLOR="#0000CD"]for[/COLOR]($i = [COLOR="#EE82EE"]0[/COLOR]; $i < $len; $i++)
    {
        [COLOR="#0000CD"]if[/COLOR]($separator && ( ([COLOR="#FF0000"]$str[/COLOR][$i] >= [COLOR="#EE82EE"]'a'[/COLOR] && [COLOR="#FF0000"]$str[/COLOR][$i] <= [COLOR="#EE82EE"]'z'[/COLOR]) || ([COLOR="#FF0000"]$str[/COLOR][$i] >= [COLOR="#EE82EE"]'A'[/COLOR] && [COLOR="#FF0000"]$str[/COLOR][$i] <= [COLOR="#EE82EE"]'Z'[/COLOR]) ) )
        {
            $brojac++;
            $separator = [COLOR="#EE82EE"]FALSE[/COLOR];
        }  
        [COLOR="#0000CD"]else[/COLOR]
            $separator = [COLOR="#EE82EE"]TRUE[/COLOR];
    }
    [COLOR="#0000CD"]return[/COLOR] $brojac;
}

Ovo ne radi kako treba, ubacio sam string za testiranje:

Kod:
<?php 
function izbroj_reci($str)
{
    $separator = TRUE;
    $brojac = 0;
    $len = strlen($str);

    for($i = 0; $i < $len; $i++)
    {
        if($separator && ( ($str[$i] >= 'a' && $str[$i] <= 'z') || ($str[$i] >= 'A' && $str[$i] <= 'Z') ) )
        {
            $brojac++;
            $separator = FALSE;
        }  
        else
            $separator = TRUE;
    }
    echo $brojac;
}

$test = "Ovo je jedna test recenica";

izbroj_reci($test);
?>

Umesto 5, prikazuje 12.
 
Ovo ne radi kako treba, ubacio sam string za testiranje:

Kod:
<?php 
function izbroj_reci($str)
{
    $separator = TRUE;
    $brojac = 0;
    $len = strlen($str);

    for($i = 0; $i < $len; $i++)
    {
        if($separator && ( ($str[$i] >= 'a' && $str[$i] <= 'z') || ($str[$i] >= 'A' && $str[$i] <= 'Z') ) )
        {
            $brojac++;
            $separator = FALSE;
        }  
        else
            $separator = TRUE;
    }
    echo $brojac;
}

$test = "Ovo je jedna test recenica";

izbroj_reci($test);
?>

Umesto 5, prikazuje 12.

Delovalo mi je da je ok, ali nisam testirao. Provericu kasnije gde je problem.


EDIT: Sada bi trebalo da radi

Kod:
<?php 
function izbroj_reci($str)
{
    $separator = TRUE;
    $brojac = 0;
    $len = strlen($str);

    for($i = 0; $i < $len; $i++)
    {
        if($separator == TRUE && ( ($str[$i] >= 'a' && $str[$i] <= 'z') || ($str[$i] >= 'A' && $str[$i] <= 'Z') ) )
        {
            $brojac++;
            $separator = FALSE;
        }  
        else if(!( ($str[$i] >= 'a' && $str[$i] <= 'z') || ($str[$i] >= 'A' && $str[$i] <= 'Z') ))
            $separator = TRUE;
    }
    echo $brojac;
}

$test = "Ovo je jedna test recenica";

izbroj_reci($test);
?>
 
Poslednja izmena:
Nije mi jasno zašto mora toliko da se komplikuje. PHP je fleksibilan i nema potrebe da se nešto budži ako može da se uradi u par linija. Moja skripta radi savršeno bez petlje. To što je string pretvoren u array ne bi imalo veze sa ostatkom programa jer to važi samo za datu funkciju.

Upravo to. U programiranju treba gledati da se problem reši sa što manjom upotrebom koda, a da to opet bude elegantno i modularno ukoliko je u pitanju neki veći sistem.
 
Elegantnije i brže rešenje:

Kod:
function izbroj_reci($string) {
	
	$reci = 0;
	$x = explode(" ", $string);
	
	foreach($x as $rec) {
		$reci += 1;
	}
	
	echo $reci;
	
}

$test = "Ovo je druga test recenica";

izbroj_reci($test);

A ako je potrebno da se prikaže svaka izbrojana reč:

Kod:
function prikaz_izbrojReci($string) {
	
	$reci = 0;
	$x = explode(" ", $string);
	
	foreach ($x as $rec) {
		$reci++;
		echo $reci . ". " . $rec . "<br>";
	}
	
}

prikaz_izbrojReci($test);

Rezultat druge funkcije će biti:

1. Ovo
2. je
3. druga
4. test
5. recenica

Inače, za one koji ne znaju, $reci += 1; radi isto što i $reci++;.
 
Poslednja izmena:

Back
Top