21

Re: Функція substr з урахуванням слів (задачка на четвірку)

Без вбудованих функцій:

<?php

function substring($str, $len) {
   
    $str .= " ";    

    if ($len >= strlen($str)) {
        return $str;
    }
    
    $result = '';
    $word = '';
    for ($i = 0; $i < $len; $i++) {
        $word .= $str[$i];
        if ($str[$i] == ' ') {
            $result .= $word;
            $word = '';
        }
    }
    
    return $result;
    
}

$str = 'PHP for Personal Home Page';
for ($i = 0; $i < 20; $i++) {
    echo $i . "\t" . substring($str, $i) . "\n";
}



1    
2    
3    PHP 
4    PHP 
5    PHP 
6    PHP 
7    PHP for 
8    PHP for 
9    PHP for 
10   PHP for 
11   PHP for 
12   PHP for 
13   PHP for 
14   PHP for 
15   PHP for 
16   PHP for Personal 
17   PHP for Personal 
18   PHP for Personal 
19   PHP for Personal 
20   PHP for Personal 

22

Re: Функція substr з урахуванням слів (задачка на четвірку)

З вбудованими:

<?php

function substring ($string, $n) {
  return substr($string, 0, strrpos(substr($string . " ", 0, $n + 1), " "));
}

$str = 'PHP for Personal Home Page';
for ($i = 1; $i <= 20; $i++) {
    echo $i . "\t" . substring($str, $i) . "\n";
}



1    
2    
3    PHP
4    PHP
5    PHP
6    PHP
7    PHP for
8    PHP for
9    PHP for
10   PHP for
11   PHP for
12   PHP for
13   PHP for
14   PHP for
15   PHP for
16   PHP for Personal
17   PHP for Personal
18   PHP for Personal
19   PHP for Personal
20   PHP for Personal

23

Re: Функція substr з урахуванням слів (задачка на четвірку)

Unicode:

<?php

function substring($str, $len) {

    if ($len >= strlen($str)) {
        return $str;
    }    

    $str .= ' ';
    
    $result = '';
    $word = '';
    for ($i = 0; $i <= $len; $i++) {
        $ch = mb_substr($str, $i, 1, "utf-8");
        $word .= $ch;
        if ($ch == ' ') {
            $result .= $word;
            $word = '';
        }
    }
    
    return $result;
    
}

$str = 'Форум програмістів';
for ($i = 1; $i <= 20; $i++) {
    echo $i . "\t" . substring($str, $i) . "\n";
}
Подякували: Patron1

24

Re: Функція substr з урахуванням слів (задачка на четвірку)

Replace написав:

Без вбудованих функцій:

<?php

function substring($str, $len) {
   
    $str .= " ";    

    if ($len >= strlen($str)) {
        return $str;
    }
    
    $result = '';
    $word = '';
    for ($i = 0; $i < $len; $i++) {
        $word .= $str[$i];
        if ($str[$i] == ' ') {
            $result .= $word;
            $word = '';
        }
    }
    
    return $result;
    
}

$str = 'PHP for Personal Home Page';
for ($i = 0; $i < 20; $i++) {
    echo $i . "\t" . substring($str, $i) . "\n";
}



1    
2    
3    PHP 
4    PHP 
5    PHP 
6    PHP 
7    PHP for 
8    PHP for 
9    PHP for 
10   PHP for 
11   PHP for 
12   PHP for 
13   PHP for 
14   PHP for 
15   PHP for 
16   PHP for Personal 
17   PHP for Personal 
18   PHP for Personal 
19   PHP for Personal 
20   PHP for Personal 

Не коректно працює:

        $str = 'bad ';
    echo substring($str, 3)."<br/>"; // нічого не виводить, має вивести "bad"

25

Re: Функція substr з урахуванням слів (задачка на четвірку)

Там <=, виправив у версії Unicode ))

Подякували: Patron1

26

Re: Функція substr з урахуванням слів (задачка на четвірку)

Patron написав:

Щось є але не те що треба))) Вирізаємо частину рядка починаючи спочатку від першого символа.

А де про те, що треба вирізати з першого символу, сказано в завданні?
Наскільки я тепер зрозумів із прочитаного, потрібно:
Із рядка виділити підрядок, який:
а) починається з першого символа рядка;
б) закінчується перед пробілом рядка;
в) містить максимальну кількість символів;
г) кількість символів не перевищує $n.
Так?
А то в нас кожен свою задачу розв'язує:)

27 Востаннє редагувалося Patron (23.09.2012 11:32:38)

Re: Функція substr з урахуванням слів (задачка на четвірку)

yooll написав:
Patron написав:

Щось є але не те що треба))) Вирізаємо частину рядка починаючи спочатку від першого символа.

А де про те, що треба вирізати з першого символу, сказано в завданні?
Наскільки я тепер зрозумів із прочитаного, потрібно:
Із рядка виділити підрядок, який:
а) починається з першого символа рядка;
б) закінчується перед пробілом рядка;
в) містить максимальну кількість символів;
г) кількість символів не перевищує $n.
Так?
А то в нас кожен свою задачу розв'язує:)

Майже все так окрім пункту б, цей пункт ви вже самі додумали. Може закінчуватися як завгодно (може взагалі не бути жодного результату якщо перше слово не поміщується в ліміт) лиш би не посеред слова.

28

Re: Функція substr з урахуванням слів (задачка на четвірку)

Тоді щось таке:

function substring($str, $n)
{
    if($n>strlen($str))
    {
        echo $n."\t";                                
        echo $str."<br />";
        return;
    }
    $result="";
    $word="";
    $finish='., !?:;)';//рядок із символів, якими може закінчуватися слово 
    for ($i=1; $i<=strlen($str); $i++)
    {
        $word.=$str[$i-1];
        for($j=0;$j<strlen($finish);$j++)
        {
            if($str[$i]==$finish[$j])
            {
                if($i<$n)
                {
                    $result.=$word;
                    $word="";
                    break;
                }
                else
                {
                    echo $n."\t";                                
                    echo $result."<br />";
                    return;
                }                       
            }
        }
    }    
}

29

Re: Функція substr з урахуванням слів (задачка на четвірку)

$finish='., !?:;)';//рядок із символів, якими може закінчуватися слово

А якщо це останнє слово у рядку яке закінчується звичайною буквою?

30

Re: Функція substr з урахуванням слів (задачка на четвірку)

Patron написав:

$finish='., !?:;)';//рядок із символів, якими може закінчуватися слово

А якщо це останнє слово у рядку яке закінчується звичайною буквою?

Перший if, тоді повертається весь рядок.

31

Re: Функція substr з урахуванням слів (задачка на четвірку)

yooll написав:
Patron написав:

$finish='., !?:;)';//рядок із символів, якими може закінчуватися слово

А якщо це останнє слово у рядку яке закінчується звичайною буквою?

Перший if, тоді повертається весь рядок.

Не вірю))

$str = 'not good';
    echo substring($str, 8)."<br/>"; // нічого не виводить

32

Re: Функція substr з урахуванням слів (задачка на четвірку)

Так, дійсно знову наплутав умову завдання ("<" замість "<=").
Крім того, не завжди був коректний вихід з функції.
Тепер наче все:)

function substring($str, $n)
{
    if($n>=strlen($str))
    {
        echo $n."\t";                                
        echo $str."<br />";
        return;
    }
    $result="";
    $word="";
    $finish='., !?):;';//рядок із символів, якими може закінчуватися слово 
    for ($i=1; $i<=strlen($str); $i++)
    {
        $word.=$str[$i-1];
        for($j=0;$j<strlen($finish);$j++)
        {
            if($str[$i]==$finish[$j])
            {
                if($i<=$n)
                {
                    $result.=$word;
                    $word="";
                    break;
                }
                else
                {
                    echo $n."\t";                                
                    echo $result."<br />";
                    return;
                }    
            }
        }
    }
    echo $n."\t";                                
    echo $result."<br />";
    return;    
}

33

Re: Функція substr з урахуванням слів (задачка на четвірку)

Ось мій кусок коду ;)

$test1String = 'PHP, java, c++ is';
$test1len    = 10;
echo cutString($test1String, $test1len);
die();

function cutString($string, $maxLen) {
  $newString = $string;
  if (mb_strlen($newString) <= $maxLen) {
    return $newString;
  }

  $i = $maxLen;
  
  do {
    $simpleWordEnd = in_array(mb_substr($newString, $i, 1), array('!', '?', ' '));
    $featuredWordEnd = in_array( mb_substr($newString, $i, 2), array(', ', '. '));

    $i--;
  } while ( $featuredWordEnd != true and $simpleWordEnd !== true and $i > 0 );

  if ($i > 0) {
    return trim(mb_substr($newString, 0, $i + 1), '.,?! ');
  } else {
    return false;
  }
}