Задачи на работу с файлами в PHP
Работа с файлами - Задачи
См. также Работа с файлами - Теория
Задача №1
Удалить из строки повторяющиеся символы, если они следуют друг за другом.
Функция strlen() - возвращает количество в строке (длину строки).
Функция strlen() - неправильно работает с кириллицей.
Функция mb_strlen() - работает также, как и функция strlen(), но корректно обрабатывает кириллицу.
Приведены 2 решения Задачи №1
1-решение более компактное и применимо в тех случаях, когда ведется работа со строкой на Латинице.
Если строка будет состоять из символов русского алфавита, то мы не получим нужного результата.
2-решение - для любых строк: как на Латинице, так и для русского алфавита.
Во 2-м решении задействована функция mb_substr, которая возвращает часть строки.
В нашем случае mb_substr($str, $i, 1) - мы вырезаем/берем один
(1) - текущий ($i) символ строки $str.
Есть функция функция substr, которая также возвращает часть строки.
Но мы используем именно функцию mb_substr.
Приставка mb функции mb_substr - позволяет корректно работать с символами на Кириллице.
Задача №2
В полученной строке найти самое длинное слово. Для этого нужно:
1. Считать строку
2. Разбить строку на слова
3. Каждое слово занести в массив
Самое главное - продумать алгоритм разбивки строки на слова. Как это сделать?
Добрый день. Мы изучаем язык программирования PHP - это исходная строка.
Чтобы разбить строку на слова мы снова будем работать с текущим и предыдущим символом.
Как понять, что слово начинается?
1. У первого слова: текущий символ равен букве (это можно записать, как НЕ равен пробелу), а предыдущий - пустоте.
2. У каждого последующего слова: текущий символ равен букве, а предыдущий - пробелу.
3. При совпадении этих условий - делаем вывод, что слово начинается.
Как понять, что слово заканчивается?
1. У последнего слова: предыдущий символ равен букве, а текущий - пустоте.
2. У других слов: предыдущий символ равен букве, а текущий - пробелу.
3. При совпадении этих условий - делаем вывод, что слово заканчивается.
PHP-код
// Считываем из файла строку. Код взят со страницы "Работа с файлами - Теория"
$f = fopen("test.txt", "r");
$str = "";
while(!feof($f)){
$str = fgets($f);
}
echo "Задача №1<br>";
echo $str;
// Задача №1 - Удалить из строки повторяющиеся символы
// Решение для строки на Латинице
// Инициализация переменных - текущий символ, предыдущий символ и новая строка
/* $char = $prevChar = $strNew = "";
for($i=0; $i<strlen($str); $i++){
$char = $str[$i]; // текущий символ строки
if($char != $prevChar) $strNew .= $char; // Заносим в новую строку символ, если он НЕ равен предыдущему
$prevChar = $char; // Запоминаем текущий символ. Он будет предыдущим при следующей итерации
}
echo "<br>";
echo $strNew; */
// Задача №1 - Решение для любой строки: как на Латинице, так и на Кириллице
$char = $prevChar = $strNew = "";
for($i=0; $i<strlen($str); $i++){
$char = mb_substr($str, $i, 1); // текущий символ строки
if($char != $prevChar) $strNew .= $char; // Заносим в новую строку символ, если он НЕ равен предыдущему
$prevChar = $char; // Фиксируем текущий символ - он будет предыдущим при следующей итерации
}
echo "<br>";
echo $strNew;
echo "<p>";
// Задача №2 - Самое длинное слово строки
echo "Задача №2<br>";
// Этап 1-ый создаем массив из слов
$char = $prevChar = "";
$arWords = [];
for($i=0; $i<=mb_strlen($str); $i++){
$char = mb_substr($str, $i, 1);
// Условие, при котором начинается новое слово
if (($prevChar=='' || $prevChar==' ') && $char!=' '){
$word = ""; // и далее см. строку 48...
}
// Условие, при котором слово заканчивается
if ($prevChar!=' ' && ($char==' ' || $char=='')) {
$arWords[] = $word; // Слово заносится в массив
}
$word .= $char; // ...в переменную/в слово заносится текущий символ
$prevChar = $char;
}
print_r($arWords);
// Чтобы в массив вошло последнее слово PHP в условии цикла счетчик $i должен быть меньше или равен длине строки
// Стоит также обратить внимание, что в условии цикла используется функция mb_strlen()
echo "<br>";
// Этап 2-ой - Ищем самое длинное слово массива
$max = 0;
foreach($arWords as $key=>$value){
if($max < mb_strlen($arWords[$key])){
$max = mb_strlen($arWords[$key]);
$maxWord = $arWords[$key];
}
}
echo "Самое длинное слово в строке '$maxWord' - число символов ".$max;
Результат
Задача №1
Добрый день мы изучаем язык программирования PHP
Добрый день мы изучаем язык програмирования PHP
Задача №2
Array ( [0] => Добрый [1] => день [2] => мы [3] => изучаем [4] => язык [5] => программирования [6] => PHP )
Самое длинное слово в строке 'программирования' - число символов 16