| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Вопрос по символьной строке |
| Автор: Гость_Shorr Kan 31.5.2005, 19:34 |
| У меня возникла проблема с символьной строкой. Из Edit считываю строку - мне всегда казалось, что это массив. А компилятор говорит, что не может перевести INT в CHAR.... В чем может быть дело? |
| Автор: Guest 31.5.2005, 19:36 |
| Т.е., считываю первый элемент массива, а он говорит, что ошибка перевода INT в CHAR |
| Автор: Mayk 31.5.2005, 19:51 |
| Странный компилятор... Int в char по жизни переводится без проблем. А можно посмотреть проблемный участок кода? |
| Автор: bel_nikita 31.5.2005, 23:20 |
| код в студию! |
| Автор: Гость_Shorr Kan 1.6.2005, 04:02 | ||||
Вот так я объявил строку в конструкторе
А это происходит по нажатию кнопочки...
Хотелось разделить ее побуквенно, и закинуть в listbox... Вот cFormula[i] не могу прочесть. Пишет - Cannot convert int to const char *. Компилятор - Borland 5.02 |
| Автор: Mayk 1.6.2005, 05:27 | ||
Не стоит путать char с char* - это совершенно разные типы.
должен спасти мир. |
| Автор: Guest 1.6.2005, 10:32 | ||
| Дело вот в чем: есть формула вида (a+b)*c надо разобрать формулу по частям (a+b) результат*с Пока придумал вариант посимвольно искать круглую скобу и вырезать ее... Может кто подскажет вариант поинтереснее? А конструкция вида:
Откуда такой эффект? |
| Автор: ManiaK 1.6.2005, 11:47 |
| Эк ты залез в дебри... тут тебе скорей всего надо Рекурсивно-Нисходящий алгоритм реализовывать. А это дело не пятиминутное и требует достаточно высокого уровня знаний по языку... Вот ссылочка по теории: http://algolist.manual.ru/syntax/parsear.php |
| Автор: segmentation_fault 1.6.2005, 15:13 |
| Если ты точно знаешь формат твоей формулы, например если формат всегда будет c(a+b) то можно сделать так: читаешь с начала строки символы и пока символы являются цифрами записываешь их в переменную c. потом игнорируешь следующий символ (это будет '(' ) и потом опять пока идут цифры записываешь их в переменную a. Опять же игнорируешь следующий '+' и записываешь всё до символа ')' в b. И потом просто вычисляешь формулу. Вариант конечно гораздо хуже нормальных алгоритмов разбора зато проще некуда. |
| Автор: AISIN 1.6.2005, 19:49 | ||
Анализируешь каждый символ выставляешь приоритеты выполнения команд и потом переводишь символы в цифры и находишь свое арифмитическое выражение согласно выставленным приоритетам! |
| Автор: Любитель 7.6.2005, 01:40 |
| Для любого выражения я использовал такой разбор: 1. Функция разбирает бинарную операцию (поиском её в строке и удалением лишних пробелом). 2. Функция разбирает выражения без скобок (использую функцию 1). Заметим, что любое выражение без скобок состоит из чередующихся операндов и операций и заносим их в массивы, отдельно ставим флаг, есть ли вначале знак операции (унарной). Создаём также 3ий массив - приоритет операций (он может вычисляться отдельной функцией). Затем пока значение максимального элемента в последнем массиве (я использовал STL) > 0 вызываем предыдущую функцию с соответствующими параметрами. Обнуляем элемент последнего массива. 3. Функция разбора любого выражения. Принцип в том, что ищем самые внутренние скобки. Я ещё делал скобки для функций (если перед скобками имя функции стоит, а не операция). ЗЫ. Я так делал (чисто учебный, естественно) свой скриптовый язык. Мой 'экзамен' в 11 классе. Кому интересно могу написать (хотя, наверно, наиболее интересно мне |