fork download
  1. <?php
  2.  
  3.  
  4.  
  5. /*
  6.   Дан неграмотно написанный текст, состоящий из нескольких предложений
  7.   на русском языке. Ошибки заключаются в неправильной расстановке
  8.   пробелов и отсутствии заглавных букв. Исправь текст так, чтобы
  9.   все предложения в нем начинались с большой буквы, а после знаков
  10.   запятая, точка, точка с запятой, двоеточие, восклицательный и
  11.   вопросительный знак стоял ровно один пробел (а перед ними — ни одного).
  12.   Составные знаки вроде многоточия или 2 вопросительных знаков подряд
  13.   должны сохраняться.
  14. */
  15.  
  16. /*
  17.   1. Первое слово после точки идёт через пробел и начинается с
  18.   большой буквы.
  19.   2. После всех знаков должен стоять один пробел, а до них не должно
  20.   стоять пробела.
  21.   3. Составные знаки (например многоточие и несколько вопросительных
  22.   знаков) должны оставаться
  23.  
  24. */
  25.  
  26. if (!function_exists('mb_ucfirst') && extension_loaded('mbstring'))
  27. {
  28. /**
  29.   * mb_ucfirst - преобразует первый символ в верхний регистр
  30.   * @param string $str - строка
  31.   * @param string $encoding - кодировка, по-умолчанию UTF-8
  32.   * @return string
  33.   */
  34. function mb_ucfirst($str, $encoding='UTF-8')
  35. {
  36. $str = mb_ereg_replace('^[\ ]+', '', $str);
  37. $str = mb_strtoupper(mb_substr($str, 0, 1, $encoding), $encoding).
  38. mb_substr($str, 1, mb_strlen($str), $encoding);
  39. return $str;
  40. }
  41. }
  42.  
  43. //$text = "ну что. не смотрел еще black mesa.я собирался скачать ,но все как-то некогда было.";
  44. //$text = 'roses are red,and violets are blue.whatever you do i\'ll keep it for you.';
  45. $text = "много их в Петербурге,молоденьких дур,сегодня в атласе да бархате,а завтра , поглядишь , метут улицу вместе с голью кабацкою...в самом деле ,что было бы с нами ,если бы вместо общеудобного правила:чин чина почитай , ввелось в употребление другое,например:ум ума почитай?какие возникли бы споры!";
  46.  
  47. /* Делает первую букву в строке заглавной */
  48. function makeFirstLetterUppercase($str) {
  49.  
  50. for ($i = 0; $i < count($str); $i++)
  51. {
  52. $newStr[$i] = mb_ucfirst($str[$i]);
  53. }
  54.  
  55. return $newStr;
  56. }
  57.  
  58. /* Исправляет текст */
  59. function fixText($str1) {
  60.  
  61. return preg_replace("/([^\s]?)\s?([.,?!:;])\s?([^\s]?)/u", "\$1\$2 \$3" , $str1);
  62.  
  63. }
  64.  
  65. // Разделяю на массив отдельных предложений
  66. $text = preg_split("/(?<=[.])/u", $text, 0, PREG_SPLIT_NO_EMPTY);
  67. // Делаю все первые буквы заглавными
  68. $text = makeFirstLetterUppercase($text);
  69. $text = implode($text);
  70.  
  71. $result = fixText($text);
  72. echo "{$result}\n";
Runtime error #stdin #stdout #stderr 0.01s 82624KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
PHP Fatal error:  Uncaught Error: Call to undefined function mb_ucfirst() in /home/wQLYoO/prog.php:53
Stack trace:
#0 /home/wQLYoO/prog.php(69): makeFirstLetterUppercase(Array)
#1 {main}
  thrown in /home/wQLYoO/prog.php on line 53