Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: проверить корректность входных данных
Покинул форум
Сообщений всего: 112
Дата рег-ции: Нояб. 2011
Помог: 0 раз(а)
Буду очень признателен если поможете разобраться со следующей задачей: дана входная
строка н-р: '{()}{}' надо проверить корректность открытия и закрытия скобок.
Если скобки закрываются симметрично '{()}' , то тут вопросов не возникает, а если так как
описано выше то......???
Данил_123
Отправлено: 29 Ноября, 2011 - 18:49:05
Участник
Покинул форум
Сообщений всего: 1026
Дата рег-ции: Июнь 2011 Откуда: rostov
Помог: 9 раз(а)
Не понял, в чем смысл?
----- http://mysitecost.ru
Maxi
Отправлено: 29 Ноября, 2011 - 18:54:50
Гость
Покинул форум
Сообщений всего: 107
Дата рег-ции: Июнь 2010 Откуда: Kharkov, Ukraine
Помог: 0 раз(а)
Можно посчитать количество знаков в строке, и если количество "(" будет равно количеству ")" то всё ок, если нет, добавить один нехватающий символ в конец или куда надо. Тут просто надо условие симетрии, так я не знаю что и как именно.
Покинул форум
Сообщений всего: 112
Дата рег-ции: Нояб. 2011
Помог: 0 раз(а)
если можете опишите то что вы написали, причем чем тут сравнение символов (Добавление)
дело в том что надо проверить корректность открытых и закрытых скобок, во входной строке, а не просто вернуть строку
DeepVarvar
Отправлено: 29 Ноября, 2011 - 19:48:01
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Покинул форум
Сообщений всего: 112
Дата рег-ции: Нояб. 2011
Помог: 0 раз(а)
вот реальная строка '{()}' == true здесь передаются симметричные скобки, здесь проблем нет, вот когда передается строка такого вида {()}{} здесь проверить ее намного сложнее, я не знаю как.
Такая строка {(})== false , вложенность скобок неверная.
DeepVarvar
Отправлено: 29 Ноября, 2011 - 20:01:08
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
"Скобочных" последовательностей в строке может быть сколько угодно или только одна?
Покинул форум
Сообщений всего: 112
Дата рег-ции: Нояб. 2011
Помог: 0 раз(а)
вот варианты:
1. ()==true
2. {()}==true
3. {()}{}==true
4. (())==true
5. {({({({()})})})}==true
6. {(})==false
DeepVarvar
Отправлено: 29 Ноября, 2011 - 20:03:47
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Для одной я вам написал код, только поменяйте условие наоборот.
Можно еще через регулярку, при условии что строка состоит только из этой последовательности:
Покинул форум
Сообщений всего: 112
Дата рег-ции: Нояб. 2011
Помог: 0 раз(а)
большое вам спасибо, но вот только надо реализовать универсальную функцию например isCorrect ('{(}) '), если передать неверную последовательность и внутри функции выполнить ваш код echo (preg_match('/^\{\(\)\}$/',$str)) ? "Ok" : "Fail"; то функция вернет ok хотя на самом деле последовательность неверная. оба ваших варианта сравнивают эти последовальности друг с другом .
DeepVarvar
Отправлено: 29 Ноября, 2011 - 20:25:06
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Да я понял что надо, самому интересно стало, сижу ковыряю.
Покинул форум
Сообщений всего: 112
Дата рег-ции: Нояб. 2011
Помог: 0 раз(а)
как вариант можно разделить семметричную последовательность пополам и сравнивать первой символ первой подстроки с первым с конца символом второй подстроки и так дальше, но это если только пос-ть семметричная
DeepVarvar
Отправлено: 29 Ноября, 2011 - 20:49:05
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Симметричность я уже осилил. Думаю насчет несимметрии.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.