<?php

error_reporting(-1);


/*
    Дан неграмотно написанный текст, состоящий из нескольких предложений 
    на русском языке. Ошибки заключаются в неправильной расстановке 
    пробелов и отсутствии заглавных букв. Исправь текст так, чтобы 
    все предложения в нем начинались с большой буквы, а после знаков 
    запятая, точка, точка с запятой, двоеточие, восклицательный и 
    вопросительный знак стоял ровно один пробел (а перед ними — ни одного). 
    Составные знаки вроде многоточия или 2 вопросительных знаков подряд 
    должны сохраняться.
*/

/*
    1. Первое слово после точки идёт через пробел и начинается с
    большой буквы.
    2. После всех знаков должен стоять один пробел, а до них не должно
    стоять пробела.
    3. Составные знаки (например многоточие и несколько вопросительных 
    знаков) должны оставаться

*/

if (!function_exists('mb_ucfirst') && extension_loaded('mbstring'))
{
    /**
     * mb_ucfirst - преобразует первый символ в верхний регистр
     * @param string $str - строка
     * @param string $encoding - кодировка, по-умолчанию UTF-8
     * @return string
     */
    function mb_ucfirst($str, $encoding='UTF-8')
    {
        $str = mb_ereg_replace('^[\ ]+', '', $str);
        $str = mb_strtoupper(mb_substr($str, 0, 1, $encoding), $encoding).
               mb_substr($str, 1, mb_strlen($str), $encoding);
        return $str;
    }
}

//$text = "ну что.      не смотрел еще black mesa.я собирался скачать  ,но все как-то некогда было.";
//$text = 'roses are red,and violets are blue.whatever you do i\'ll keep it for you.';
$text = "много их в Петербурге,молоденьких дур,сегодня в атласе да бархате,а завтра , поглядишь , метут улицу вместе с голью кабацкою...в самом деле ,что было бы с нами ,если бы вместо общеудобного правила:чин чина почитай , ввелось в употребление другое,например:ум ума почитай?какие возникли бы споры!";
 
/* Делает первую букву в строке заглавной */
function makeFirstLetterUppercase($str) {

    for ($i = 0; $i < count($str); $i++)
    {
        $newStr[$i] = mb_ucfirst($str[$i]);
    }

    return $newStr;
}
 
/* Исправляет текст */
function fixText($str1) {
 
    return preg_replace("/([^\s]?)\s?([.,?!:;])\s?([^\s]?)/u", "\$1\$2 \$3" , $str1);
 
}

// Разделяю на массив отдельных предложений
$text = preg_split("/(?<=[.])/u", $text, 0, PREG_SPLIT_NO_EMPTY);
// Делаю все первые буквы заглавными
$text = makeFirstLetterUppercase($text);
$text = implode($text);

$result = fixText($text);
echo "{$result}\n";