jin18 | ||||||
В общем в лабораторной надо реализовать синтаксический анализатор математического выражения - подсчет зн-ния любой мат. ф-ии введенной с клавиатуры . Для этого я думаю стоит использовать класс string. То есть читаю строковую переменную, а затем с помощью уже реализованных методов класса string обрабатываю ее. Как включить библиотеку #include <string> или #include <cstring> или #include <string.h> (все перепробовал, одновременно 2 из них не включал)? Далее объявляю переменную string s; или String s; Компилятор начинает ругаться, типа error C2065: 'String' : undeclared identifier error C2146: syntax error : missing ';' before identifier 's' error C2065: 's' : undeclared identifier Помогите решить эту проблему. PS не могли бы так же поделиться ссылками, полезными для решения задачи синт.анализатора мат.выражения. Заранее спасибо... |
||||||
kelt13 | ||||||
я бы на месте компилятора тоже ругался :) string - класс из STL, оно всё живет в namespace (пространстве имен) std. Есть два варианта:
|
||||||
kelt13 | ||||||
да, касательно синтаксического анализа. что может быть в строке? скобки? какие операции? в зависимости от можно быстренько наваять программку. | ||||||
jin18 | ||||||
Ура заработало, только почему не работают перегруженные операторы cin и cout для строк: string s = ("Stroka"); cout << s; пишет: error C2679: binary '<<' : no operator defined which takes a right-hand operand of type 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char Что касается анализатора: в нем могут быть скобки (), ф-ии exp, ln, sin, cos, ^n(это возведение в степень), +, -, *, /. Мне бы хотя бы идейку здравую и рациональную, не то что готовую программу(все равно в чужом коде тяжело будет разбираться). Наверное надо использовать рекурсию, возможно, бинарные деревья и их различные обходы , как у Вирта. Хотя бы без проверки на ошибки - просто чтобы правильно выдавала зн-ние ф-ии в точке. За то что уже откликнулся - огромное спасибо. |
||||||
kelt13 | ||||||
ну нет там перегруженного оператора вывода в поток. попробуй
в двух словах: можно обойтись без рекурсии и деревьев; у тебя все же задача вычислить значение математического выражения. просматриваешь строку, на лету при помощи стека перегоняешь её в обратную польскую запись и в ней же на лету же и вычисляешь. если будут сложности --- напиши, я тебе расскажу алгоритм для 4-х операций. до скобок и всего остального он дорабатывается максимум за час. Это сообщение отредактировал kelt13 - 11-12-2006 - 14:01 |
||||||
JeyLo | ||||||
Очень полезная ссылка. А это еще одна очень полезная ссылка. Это сообщение отредактировал JeyLo - 13-12-2006 - 16:04 |
||||||
jin18 | ||||||
Парни, до сих пор мучаюсь. Вроде выдает ответ правильно. Ho у меня там встроенная ф-ия, которая преобразует любое число типа double(целое или вещественное) в строку. Работает она сначала нормально, но когда на входе число содержащее большое кол-во цифр, напр. 6.429999625 она не работает. Просто у меня в цикле это число умножается на 10-ку в возрастающей степени(6.429999625, 64.29999625, 642.9999625 и т.д.) пока не станет целым. Мне на этом этапе надо определить положение точки(считая с конца числа - то есть сколько раз я на 10 умножал), и получить целое число = 6429999625 , которое я потом обрабатываю - получаю символы '5', '2', '6', '9', ..., '6'. И записываю их в строку. Но вот проблема: тип целое число имеет максимальное зн-ние 2147483648. Так что нельзя присвоить целому числу это зн-ние 6429999625, и для чисел с кол-вом цифр больше 9 не работает алгоритм. А только целое число можно делить по модулю. Значит по символам мне его не разобрать. Sorry за этот детский лепет, но в инете ничего не нашел для C++ по этому вопросу. Встроенной ф-ии вроде нет и никак чето не получается. А с выражением вроде все пока работает, спасибо(я с ним несколько дней мучался). Не могли подсказать че делать? Заранее спасибо |
||||||
jin18 | ||||||
Да совсем забыл cout << s.c_str(); работает, а для cin >> нет подобной ф-ии? |
||||||
JeyLo | ||||||
|
||||||
pomogite | ||||||
Помогите решить...............Дана целочисленная матрица размера n X m, в которой имеются ровно два одинаковых элемента. Найти индексы этих элементов. | ||||||
JeyLo | ||||||
stl? c? cpp? | ||||||
pomogite | ||||||
сpp |
||||||
JeyLo | ||||||
Дублирование было излишним. Смотрите Вашу тему. |