разбив эту строку на подстроки по три символа, я подсчитал подстроки, в которых встречается "1" и в которых нет. Получил следующий результат:
(стало быть 1, где блок с "1" и 0 - без)
10101000110100001001100011110100 1
Теперь трудная для меня задача. Есть кодовая комбинация, состоящая из четырех символов, в которой должно быть три "0" и одна "1", при чем независимо от их порядка (т.е. '1000', или '0100', или '0010', или '0001' ). Мне необходимо найти первое же совпадение в этой строке. Т.е. я проверяю первые четыре символа, если нет попадания, то смещаюсь на один символ и снова сравниваю и так, пока не получится. В данном примере первая комбинация будет '0100'
Мне кажется, что ни preg_match, ни strstr в этом случае не помогут. Я мыслю, что нужно искать по количеству нулей, а их в кодовой комбинации 3, т.е. взять четыре символа из строки, проверить, если количество нулей равно трем, то попадание, если нет - смещаемся на один символ вправо. Вообщем, голова просто кипит =)
изрисовал кучу бумаги, а идей толковых не родилось. Помогите, плиз =/
Champion
Отправлено: 09 Марта, 2009 - 11:39:42
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
Valimar пишет:
состоящая из четырех символов, в которой должно быть три "0" и одна "1",
Таких комбинаций не так уж и много - всего 4. Есть strpos() и or (Добавление)
еще с preg_match вариант такой
preg_match('/(0*10*)/', $stroka_s_00101011, $mathes);
потом пройти по $matches и убрать ототуда элементы, длина которых не 4
Valimar
Отправлено: 09 Марта, 2009 - 12:17:45
Новичок
Покинул форум
Сообщений всего: 56
Дата рег-ции: Янв. 2009
Помог: 0 раз(а)
Champion пишет:
Таких комбинаций не так уж и много - всего 4. Есть strpos() и or
Просто неизвестно, какая комбинация встретится первой. А если нужно будет изменить кодовую комбинацию, т.е. прибавить ещё один "0", то со strpos() уже не получится.
Вообще мне не понятно, как делать сдвиг на один символ.
Champion
Отправлено: 09 Марта, 2009 - 12:50:30
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
Valimar пишет:
Вообще мне не понятно, как делать сдвиг на один символ.
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
IOpeH, исправил, спасибо. then после if это конечно я дал))... На работе 2 недели в Дельфи программировал) Остальное тоже поправил)
Valimar
Отправлено: 09 Марта, 2009 - 16:59:39
Новичок
Покинул форум
Сообщений всего: 56
Дата рег-ции: Янв. 2009
Помог: 0 раз(а)
IOpeH, Champion спасибо вам!
IOpeH Здорово! Только, вот это хорошо, когда известно, что комбинация из четырех символов, а если придется её менять, скажем, из трех символов (два нуля, одна единица) или из пяти (четыре нуля, одна единица), тут уже сложнее. В программе нужно будет заранее вносить нужные числа, т.е.:
И вложенный цикл непонятно, как работает. Такое ощущение, что он не обрабатывает каждую подстроку, а посимвольно возвращает всю строку. А $cnt возвращает 67
Покинул форум
Сообщений всего: 56
Дата рег-ции: Янв. 2009
Помог: 0 раз(а)
вроде всё, я просто забыл переменную $cnt переодически обнулять перед обработкой следующей подстроки, тем самым условие if ($cnt == 3) не выполнялось, т.к. счетчик постоянно рос =)))
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.