Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.03.2016, 22:51   #1
Andryan00
Пользователь
 
Регистрация: 19.03.2015
Сообщений: 23
По умолчанию строки в php

Помогите, в строках полный ноль. Нужно разработать PHP-скрипт, в котором Исключены из строки группы символов, расположенные между символами «/*», «*/» включая границы . Предполагается, что нет вложенных скобок. Можно использовать только строковые функции. Использовать функции работы с датами и файлами, регулярные выражения и прочее запрещается.
Andryan00 вне форума Ответить с цитированием
Старый 16.03.2016, 08:00   #2
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

и что тут - благотворительная организация "сделай за меня" ???
Если есть свои наработки и что-то не получается - поможем, подскажем, иначе - во фриланс за вознаграждение
ADSoft вне форума Ответить с цитированием
Старый 16.03.2016, 13:39   #3
CodeNOT
Форумчанин
 
Аватар для CodeNOT
 
Регистрация: 08.11.2010
Сообщений: 593
По умолчанию

я у мамы упоролся, почему регулярку использовать нельзя? Насилие над человеком?
Код:
$string = 'Lorem ipsum dolor sit amet, consectetur adipisicing /*elit*/. Perferendis ea voluptate 
recusandae similique, ipsam placeat, quidem unde natus numquam nihil ad aperiam aspernatur harum /*reprehenderit*/ hic /*/*iusto*/*/ iure ullam inventore!';

while(strpos($string,'/*') !== false){ //пока у нас есть открывающие комментарии
        if(strpos($string,'*/') === false) break;
	$open = strpos($string,'/*');//находим его
	$close = strpos($string,'*/');//ищем его окончание
	$string = str_replace(substr($string, $open,$close),'',$string); //вырезаем подстроку и заменяем ее на пустоту

}

echo $string;

Последний раз редактировалось CodeNOT; 16.03.2016 в 21:26. Причина: Баг фикс, а то цикл бесконечным мог выйти
CodeNOT вне форума Ответить с цитированием
Старый 16.03.2016, 21:59   #4
Andryan00
Пользователь
 
Регистрация: 19.03.2015
Сообщений: 23
По умолчанию

Цитата:
Сообщение от CodeNOT Посмотреть сообщение
я у мамы упоролся, почему регулярку использовать нельзя? Насилие над человеком?
Код:
$string = 'Lorem ipsum dolor sit amet, consectetur adipisicing /*elit*/. Perferendis ea voluptate 
recusandae similique, ipsam placeat, quidem unde natus numquam nihil ad aperiam aspernatur harum /*reprehenderit*/ hic /*/*iusto*/*/ iure ullam inventore!';

while(strpos($string,'/*') !== false){ //пока у нас есть открывающие комментарии
        if(strpos($string,'*/') === false) break;
	$open = strpos($string,'/*');//находим его
	$close = strpos($string,'*/');//ищем его окончание
	$string = str_replace(substr($string, $open,$close),'',$string); //вырезаем подстроку и заменяем ее на пустоту

}

echo $string;
ввел такое $string = 'Сергей/* Андрей*/ Владимир Андрей /* Сергей */ Андрей';
вывело: Сергейдимир Андрей
Andryan00 вне форума Ответить с цитированием
Старый 16.03.2016, 22:01   #5
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Какие проблемы с использованием регулярных выражений в задаче?
Зачем городить все эти костыли со строковыми функциями?
Andkorol вне форума Ответить с цитированием
Старый 16.03.2016, 22:03   #6
Andryan00
Пользователь
 
Регистрация: 19.03.2015
Сообщений: 23
По умолчанию

Запретил преподаватель, так бы я и сам сделал. Над нами просто издеваются
Andryan00 вне форума Ответить с цитированием
Старый 16.03.2016, 22:16   #7
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Скорее, вас пытаются научить думать головой, и применять различные возможности языка программирования для решения задачи – а не только самые простые и очевидные.
Далеко не самые бесполезные навыки для программиста, должен сказать.

CodeNOT показал общие принципы решения задачи – хоть и технически его пример не работает корректно.
Я бы попробовал вместо strpos использовать stripos – чтобы последовательно получать позиции граничных элементов в цикле.
Andkorol вне форума Ответить с цитированием
Старый 17.03.2016, 15:38   #8
CodeNOT
Форумчанин
 
Аватар для CodeNOT
 
Регистрация: 08.11.2010
Сообщений: 593
По умолчанию

Это не реализация вам готового, а один из примеров, что бы так сказать подкинуть идею, собственно думаю смысла дальше демогогию разводить нет, код ниже (используется библиотека mbstring, так как php не очень хорошо работает с кириллицей):

Код:

function getStringWithouQuotes($string,$open_q = '/*',$close_q = '*/'){
	$result_string = '';
	$buff_string = $string;
	while(mb_strpos($string, $open_q) !== false && mb_strpos($string,$close_q) !== false){
		$sub_string = mb_substr($string, 0,mb_strpos($string,$open_q));
		$string = mb_substr($string,mb_strlen($sub_string),mb_strlen($string));
		$result_string .= $sub_string;
		$string = mb_substr($string,(mb_strpos($string,$close_q) + mb_strlen($close_q)),strlen($string));
	}
	return (mb_strlen($string) > 0) ? $result_string.$string : $result_string;
}


$test = array(
	array(
		'string' => 'Сергей/* Андрей*/ Владимир Андрей /* Сергей */ Андрей',
		'result' => 'Сергей Владимир Андрей  Андрей'
	),
	array(
		'string' => 'Lorem /*ipsum dolor sit amet*/, consectetur adipisicing elit. /*Iure*/ alias consequatur id, ipsa consequuntur ab!',
		'result' => 'Lorem , consectetur adipisicing elit.  alias consequatur id, ipsa consequuntur ab!'
	)
);



foreach($test as $index => $data)
{
	$test_result = getStringWithouQuotes($data['string'],'/*','*/');
	echo 'Test ['.$index.'] ';
	echo ($test_result == $data['result']) ? ' ok ['.$test_result.']' : ' false';
	echo PHP_EOL;
}
CodeNOT вне форума Ответить с цитированием
Старый 17.03.2016, 15:41   #9
CodeNOT
Форумчанин
 
Аватар для CodeNOT
 
Регистрация: 08.11.2010
Сообщений: 593
По умолчанию

И да, имхо, по мне тут лучше организовать конечный автомат для проверки всего этого, но конечно же получиться опять же тривиальный случай регулярки
CodeNOT вне форума Ответить с цитированием
Старый 17.03.2016, 16:18   #10
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

PHP код:
<?php

$string 
'Сергей/* Андрей*/ Владимир Андрей /* Сергей */ Андрей';

while ((
$l=strpos($string,'/*'))!==false && ($r=strpos($string,'*/',$l))!==false)
    
$string=substr($string,0,$l).substr($string,$r+2);

echo 
$string;
 
?>
Кодировка файла CP1251, для UTF-8 используйте функции mb.
Arigato вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Формирование адресной строки php serrgggeee PHP 0 27.12.2013 02:07
Удоление строки из файла php jasul PHP 8 18.03.2012 09:47
[PHP] Изменение определенной строки JonMagon Помощь студентам 1 16.10.2011 09:25
PHP удаление нужной строки в файле Seran4ek Помощь студентам 2 12.08.2011 12:38
PHP строки Небесный PHP 6 21.10.2010 22:03