Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Строковые переменные 
:(
    Опции темы
sembler
Дата 6.11.2005, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 25.4.2005

Репутация: нет
Всего: нет



Мои познания синтаксиса с++ крайне малы, а в плане строковых переменных вообще равны нулю. Столкнулся с проблемой, необходимо написать программу перекодировки математической записи выражения (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... Просто я и без с++ отлично смогу прожить, а вот задачку решить надо.
PM MAIL   Вверх
Void
Дата 6.11.2005, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



Код
#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, мало чем отличается от других языков, так что скажите поточнее, что вам непонятно.

Это сообщение отредактировал(а) Void - 6.11.2005, 21:51


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
sembler
Дата 6.11.2005, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 25.4.2005

Репутация: нет
Всего: нет



Я не упомянул, что программу надо писать на turbo c++, а то у меня нет библиотек iostream, sstream...
дело в том, что я только мельком просмотрел синтаксис с++ и там строки были реализованы как массивы символов.
PM MAIL   Вверх
sembler
Дата 7.11.2005, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 25.4.2005

Репутация: нет
Всего: нет



А как узнать номер ascii символа (Только не через print_f)?
PM MAIL   Вверх
Exekutor
Дата 7.11.2005, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 1.11.2005
Где: Казахстан. Костан ай

Репутация: 1
Всего: 4



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


--------------------
[color=blue][size=2]En taro addun, ma sol larinas[/size][/color]
PM MAIL   Вверх
sembler
Дата 24.11.2005, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 25.4.2005

Репутация: нет
Всего: нет



Люди, хельп ми плиз!
PM MAIL   Вверх
Neitron
Дата 25.11.2005, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 580
Регистрация: 3.10.2005
Где: Москва

Репутация: 2
Всего: 5



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

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

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

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


--------------------
Хороший программист никогда ничего не делает хорошо с первого раза. Он понимает важность патчей.
Ⓘ ⓁⒾⓀⒺ ⓂⓄⓏⒾⓁⓁⒶ
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0689 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.