|
Помогите с простеньким кодом | ☑ | ||
---|---|---|---|---|
0
demmix
26.04.13
✎
00:31
|
Простенький алгоритм,есть форма,в ней строка и кнопка,в строку вообиться уравнение,по кнопке осуществляется проверка уравнения на правильность написания скобок (все ли закрываються). Проблема в том что некорректно строка преобразуеться в массив(сам криворукий и только учусь,сильно не пинайте)
&НаКлиенте Процедура Кнопка(Команда) Мас = Новый Массив; Для Стр=0 по СтрДлина(Строка) цикл Мас.Добавить( Сред(Строка, стр, 1)); Стр = Стр + 1; КонецЦикла; Сообщение = Новый СообщениеПользователю; а=0; Для Ст = 0 по мас.Количество()-1 Цикл Если Мас[Ст] = "(" Тогда а= а+1 ; ИначеЕсли Мас[Ст] = ")" Тогда а = а -1; Если а<0 Тогда Сообщение.Текст = "Неверно"; Сообщение.Сообщить(); КонецЕсли; КонецЕсли; Ст = Ст + 1; КонецЦикла; Если а =0 Тогда Сообщение.Текст = "Верно"; Сообщение.Сообщить(); Иначе Сообщение.Текст = "Неверно"; Сообщение.Сообщить(); КонецЕсли; Мас.Очистить(); Ст= 0; Стр = 0; а=0; КонецПроцедуры ; |
|||
1
Ёпрст
26.04.13
✎
00:56
|
(0)
СтрЧислоВхождений пользуй.. |
|||
2
Ёпрст
26.04.13
✎
00:56
|
достаточно сравнить
СтрЧислоВхождений(строкатвоя,"(") с СтрЧислоВхождений(строкатвоя,")") |
|||
3
sanja26
26.04.13
✎
01:01
|
// Функция "расщепляет" строку на подстроки, используя заданный
// разделитель. Разделитель может иметь любую длину. // Если в качестве разделителя задан пробел, рядом стоящие пробелы // считаются одним разделителем, а ведущие и хвостовые пробелы параметра Стр // игнорируются. // Например, // РазложитьСтрокуВМассивПодстрок(",строка 1,,,строка 2", ",") возвратит массив значений из пяти элементов, // три из которых - пустые строки, а // РазложитьСтрокуВМассивПодстрок(" строка1 строка 2", " ") возвратит массив значений из двух элементов // // Параметры: // Стр - строка, которую необходимо разложить на подстроки. // Параметр передается по значению. // Разделитель - строка-разделитель, по умолчанию - запятая. // // // Возвращаемое значение: // массив значений, элементы которого - подстроки // Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",") Экспорт МассивСтрок = Новый Массив(); Если Разделитель = " " Тогда Стр = СокрЛП(Стр); Пока Истина Цикл Поз = Найти(Стр,Разделитель); Если Поз=0 Тогда МассивСтрок.Добавить(Стр); Возврат МассивСтрок; КонецЕсли; МассивСтрок.Добавить(Лев(Стр,Поз-1)); Стр = СокрЛ(Сред(Стр,Поз)); КонецЦикла; Иначе ДлинаРазделителя = СтрДлина(Разделитель); Пока Истина Цикл Поз = Найти(Стр,Разделитель); Если Поз=0 Тогда МассивСтрок.Добавить(Стр); Возврат МассивСтрок; КонецЕсли; МассивСтрок.Добавить(Лев(Стр,Поз-1)); Стр = Сред(Стр,Поз+ДлинаРазделителя); КонецЦикла; КонецЕсли; КонецФункции |
|||
4
sanja26
26.04.13
✎
01:05
|
я недавно через это решал)..
// функция определяет есть ли хотя бы одна не цифра в строке Функция ЕстьНеЦифрыВСтроке(Знач СтрокаПроверки) Экспорт Для а = 1 По СтрДлина(СтрокаПроверки) Цикл КодСимвола = КодСимвола(Сред(СтрокаПроверки, а, 1)); Если НЕ (КодСимвола >= 48 И КодСимвола <= 57) Тогда Возврат Истина; КонецЕсли; КонецЦикла; Возврат Ложь; КонецФункции |
|||
5
Kookish
26.04.13
✎
01:08
|
А зачем вообще разбивать строку на массив? Может, достаточно просто перебирать символы. И счетчик: "(" - +1, ")" - -1. В начале 0, в конце выходим на 0. Если в процессе пошли в минус - ошибка, если в конце не 0 - ошибка.
Это если решать то, что ТС написал, а не то, что подразумевал. |
|||
6
sanja26
26.04.13
✎
01:09
|
Определяешь кодСимвола через КодСимвола(")") и КодСимвола("(")
СчетчикЛевыхСкобок = 0) СчетчикПравыхСкобок = 0; Для а = 1 По СтрДлина(СтрокаПроверки) Цикл Если КодСимвола(а) = КодЛевойСкобки тогда СчетчикЛевыхСкобок = СчетчикЛевыхСкобок + 1; Иначе ..... КонецЦикла; в общем задачка раз плюнуть... |
|||
7
GANR
26.04.13
✎
01:10
|
(2) "()))строка моя((()"
|
|||
8
sanja26
26.04.13
✎
01:12
|
если СчетчикПравыхСкобок > СчетчикЛевыхСкобок выражение неправильное
|
|||
9
demmix
26.04.13
✎
10:12
|
Спасибо,помогли)
|
|||
10
Simod
26.04.13
✎
10:21
|
А что, Сред(Строка, стр, 1) при стр = 0 что-то возвращает?
|
|||
11
zak555
26.04.13
✎
10:59
|
в польскую запись перевёл ?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |