jin18 Свободен |
09-12-2006 - 23:37 В общем в лабораторной надо реализовать синтаксический анализатор математического выражения - подсчет зн-ния любой мат. ф-ии введенной с клавиатуры . Для этого я думаю стоит использовать класс 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 Свободен |
10-12-2006 - 20:40 я бы на месте компилятора тоже ругался :) string - класс из STL, оно всё живет в namespace (пространстве имен) std. Есть два варианта:
|
||||||
kelt13 Свободен |
10-12-2006 - 20:47 да, касательно синтаксического анализа. что может быть в строке? скобки? какие операции? в зависимости от можно быстренько наваять программку. |
||||||
jin18 Свободен |
10-12-2006 - 21:43 Ура заработало, только почему не работают перегруженные операторы 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 Свободен |
11-12-2006 - 14:01
ну нет там перегруженного оператора вывода в поток. попробуй
в двух словах: можно обойтись без рекурсии и деревьев; у тебя все же задача вычислить значение математического выражения. просматриваешь строку, на лету при помощи стека перегоняешь её в обратную польскую запись и в ней же на лету же и вычисляешь. если будут сложности --- напиши, я тебе расскажу алгоритм для 4-х операций. до скобок и всего остального он дорабатывается максимум за час. Это сообщение отредактировал kelt13 - 11-12-2006 - 14:01 |
||||||
Свободен |
13-12-2006 - 16:01 Очень полезная ссылка. А это еще одна очень полезная ссылка. Это сообщение отредактировал JeyLo - 13-12-2006 - 16:04 |
||||||
jin18 Свободен |
18-12-2006 - 04:27 Парни, до сих пор мучаюсь. Вроде выдает ответ правильно. Ho у меня там встроенная ф-ия, которая преобразует любое число типа double(целое или вещественное) в строку. Работает она сначала нормально, но когда на входе число содержащее большое кол-во цифр, напр. 6.429999625 она не работает. Просто у меня в цикле это число умножается на 10-ку в возрастающей степени(6.429999625, 64.29999625, 642.9999625 и т.д.) пока не станет целым. Мне на этом этапе надо определить положение точки(считая с конца числа - то есть сколько раз я на 10 умножал), и получить целое число = 6429999625 , которое я потом обрабатываю - получаю символы '5', '2', '6', '9', ..., '6'. И записываю их в строку. Но вот проблема: тип целое число имеет максимальное зн-ние 2147483648. Так что нельзя присвоить целому числу это зн-ние 6429999625, и для чисел с кол-вом цифр больше 9 не работает алгоритм. А только целое число можно делить по модулю. Значит по символам мне его не разобрать. Sorry за этот детский лепет, но в инете ничего не нашел для C++ по этому вопросу. Встроенной ф-ии вроде нет и никак чето не получается. А с выражением вроде все пока работает, спасибо(я с ним несколько дней мучался). Не могли подсказать че делать? Заранее спасибо |
||||||
jin18 Свободен |
18-12-2006 - 04:30 Да совсем забыл cout << s.c_str(); работает, а для cin >> нет подобной ф-ии? |
||||||
Свободен |
18-12-2006 - 11:30
|
||||||
pomogite Свободен |
29-05-2010 - 22:12 Помогите решить...............Дана целочисленная матрица размера n X m, в которой имеются ровно два одинаковых элемента. Найти индексы этих элементов. |
||||||
Свободен |
30-05-2010 - 02:15 stl? c? cpp? |
||||||
pomogite Свободен |
30-05-2010 - 07:11 сpp |
||||||
Свободен |
30-05-2010 - 15:12 Дублирование было излишним. Смотрите Вашу тему. |