
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.123] |
![]() |
|
Сообщ.
#1
,
|
|
|
Приветствую.
Необходимо искать в строке открывающиеся и закрывающиеся скобки. Наткнулся на UnicodeCategory в МСДНе. Можно ли с помощью него искать пару открывающейся кавычке? Спасибо. |
Сообщ.
#2
,
|
|
|
Цитата SunDevil @ искать в строке String.IndexOf() |
Сообщ.
#3
,
|
|
|
Цитата SunDevil @ Наткнулся на UnicodeCategory в МСДНе. Можно ли с помощью него искать пару открывающейся кавычке? По этому вопросу не знаю, но я в старые добрые времена (еще на С) искал обыкновенным циклом ![]() ![]() ![]() int o=-1; int z=-2; for(int i=1;i<=s.length;++i) { if(s[i]=='(') ++o; if(s[i]==')') ++z; if(z==o) { ...нашол!... } } |
Сообщ.
#4
,
|
|
|
Цитата Лилой @ ![]() ![]() int o=-1; int z=-2; Что за магические начальные значения ? ![]() |
Сообщ.
#5
,
|
|
|
Цитата IL_Agent @ Что за магические начальные значения ? ![]() Кол-во открытых и закрытых скобок. А вот чего инициализирует -1, а не нулем, действительно непонятно. Возможно из-за каких-то дальнейших особенностей алгоритма. |
Сообщ.
#6
,
|
|
|
Цитата А вот чего инициализирует -1, а не нулем, действительно непонятно. Да тут много чего не понятно =) С учетом что скобки - это все таки количество открывающих скобок должно быть равно количеству закрывающих, непонятно почему o и z инициализируются разными значениями. |
Сообщ.
#7
,
|
|
|
Цитата int0 @ Да тут много чего не понятно =) С учетом что скобки - это все таки количество открывающих скобок должно быть равно количеству закрывающих, непонятно почему o и z инициализируются разными значениями. Потому разными, что в цикле есть строка их сравнения: ![]() ![]() if(z==o) Но, все же, извините, я протупил с первичным кодом, надо было как-то так: ![]() ![]() int o=-1; int z=-2; for(int i=1;i<=s.length;++i) { if(s[i]=='(') ++o; if(s[i]==')') ++z; if((z+1)==o) { ...нашол!... } } А вобще-то надо сделать так, что-бы o != z перед началом цикла. Я такой "способ" привел, может быть вы другой знаете ![]() Eсли хотите, я пороюсь в старых кодах и приведу вам полный алгоритм (он рекурсивен) Добавлено Не нашел, так что сам заново написал: ![]() ![]() public float ParseMath(string formula) { int o = -1; int z = -2; int pos_o = 0; for (int i = 1; i < formula.Length; ++i) { if (formula[i] == '(') { ++o; pos_o = i; } if (formula[i] == ')') ++z; if ((z + 1) == o) { ParseMath(formula.Substring(pos_o, i - pos_o)); } } } Такой алгоритм я использовал для разбиения "по скобкам" но он совершенно не подходит для вычисления. Если тебе нужно именно это, то попробуй обратную запись формулы или же алгоритм, в основе которого используеться теория деревьев. |