Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Строковые переменные


Автор: sembler 6.11.2005, 21:10
Мои познания синтаксиса с++ крайне малы, а в плане строковых переменных вообще равны нулю. Столкнулся с проблемой, необходимо написать программу перекодировки математической записи выражения (11*21/31+41) в обратную польскую (11 21 * 31 / 41 +). Алгоритм несложный. Проблема заключается в том, что я не умею работать с символами. Как можно считать набор цифр и соеденить их в одно число.
Короче мне надо разделить исходное выражение в массив, где по очереди находились бы скобки, операторы и операнды.
Пример:
входные данные: 21*(24+6)/5
исходные: массив
[0] = 21
[1] = *
[2] = (
[3] = 24
[4] = +
[5] = 6
[6] = )
[7] = /
[8] = 5

Желательно работающей прогой, чтобы я видел пример работающий со строками.
ps извините если мой вопрос rtfm... Просто я и без с++ отлично смогу прожить, а вот задачку решить надо.

Автор: Void 6.11.2005, 21:41
Код
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
#include <cctype>

using namespace std;

int main() {
    string s;
    getline(cin, s); // ввод строки
    istringstream is(s);
    vector<int> operands; // вектор операндов
    vector<char> operators; // вектор операторов и скобок
    char c;
    while (is >> c) {
        if (isdigit(c)) {
            int i;
            is.unget();
            is >> i;
            operands.push_back(i);
        } else {
            operators.push_back(c);
        }
    }
}


Операнды и операторы складываются в различные массивы, потому что имеют разные типы, а преобразовывать int обратно в строку я не стал.

Я прекрасно понимаю, что для новичка в C++ такой код выглядит... э-э... не очень понятно, но пока ничего больше в голову не лезет smile

Синтаксис работы со строками в C++, если использовать std::string, мало чем отличается от других языков, так что скажите поточнее, что вам непонятно.

Автор: sembler 6.11.2005, 22:16
Я не упомянул, что программу надо писать на turbo c++, а то у меня нет библиотек iostream, sstream...
дело в том, что я только мельком просмотрел синтаксис с++ и там строки были реализованы как массивы символов.

Автор: sembler 7.11.2005, 10:38
А как узнать номер ascii символа (Только не через print_f)?

Автор: Exekutor 7.11.2005, 10:42
Номер узнать просто - функцией int(char ch);
Добавлено @ 10:45
а вообще используй структуры. Читаешь строку ввода в строку и разбиваешь ее по структурам.

Автор: sembler 24.11.2005, 22:41
Люди, хельп ми плиз!

Автор: Neitron 25.11.2005, 11:00
Цитата(Exekutor @ 7.11.2005, 10:42)
Номер узнать просто - функцией int(char ch);
Добавлено @ 10:45
а вообще используй структуры. Читаешь строку ввода в строку и разбиваешь ее по структурам.

Нет такой ф-ции int(char)
Это называется преобразование типа.
Небезопасное.
Цитата

Я не упомянул, что программу надо писать на turbo c++, а то у меня нет библиотек iostream, sstream...
дело в том, что я только мельком просмотрел синтаксис с++ и там строки были реализованы как массивы символов.

Это библиотеки стандарта самого языка С++
Поэтому у тебя должны быть эти библиотеки, а если нет, то у тебя урезанная дрянная версия неполного С++.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)