2015-11-11 12 views
7

У меня есть класс полиномов, а его естественное представление - его коэффициенты. Если задан коэффициент, то его a 1 для биномиального базиса, 1 или 2 для трехчленного базиса и т. Д. Например, в биномиальном базисе X + 1 представляется как 101; и в триномном порядке, 2X + 1 представлен как 201.Использование ostream с базами, отличными от 8, 10 и 16

Класс обеспечивает перегрузку operator<<. Внутренне класс представляет коэффициенты с использованием целочисленного массива. Так что я должен быть в состоянии выполнить:

ostringstream oss; 
for (size_t i=0; i<v.size(); i++) 
    oss << v[i]; 

Проблема, которую я имею, я не знаю, как настроить ostream для других оснований, чем 8, 10 и 16. ios_base обеспечивает std::oct, std::dec и std::hex для популярные базы, но я не вижу, что использовать для менее часто используемых баз. И такие страницы, как C++ Reference on ios_base, не обсуждают, что использовать.

Как использовать ostream с базами, отличными от 8, 10 и 16?

+1

Нет, нет поддержки для других баз. Вы должны преобразовать его в строку и вывести это. –

+4

Не уверен, что это возможно с использованием стандартных средств. Глядя на http://en.cppreference.com/w/cpp/io/manip/setbase - «Значения базы, отличной от 8, 10 или 16, сбрасывают базовое поле до нуля, что соответствует десятичному выходному сигналу и входному сигналу, зависящему от префикса. " – jready

+0

Если что-то, о чем я не знаю, было добавлено совсем недавно, в iostreams нет поддержки для баз, отличных от 8, 10 и 16. Вам нужно будет читать числа как строки и декодировать их вручную. – zwol

ответ

0

Замена моего ответа, так как направление было назад. См. itoa. В документации говорится, что это нестандартная функция. Поскольку это нестандартная функция, stackoverflow имеет некоторые реализации на странице.

+2

К сожалению, ОП просит другого. Им нужно будет предоставить свой собственный IO-манипулятор. Конечно, эта реализация должна дать строковое представление, подтверждающее, что 'stoi()' может снова преобразовать в число. –

+1

'setbase' похоже не работает должным образом. На приведенной странице: * «... Значения базы, отличной от 8, 10 или 16, сбрасывают базовое поле до нуля, что соответствует десятичному выводу и входному сигналу, зависящему от префикса». * – jww

+0

@ πάνταῥεῖ. Исправлен мой ответ. Спасибо за головы. –

4

Я не думаю, что это возможно используя стандартные средства. Глядя на std::setbase

Значения основания, кроме 8, 10, 16 или сброса basefield к нулю, что соответствует десятичному выходу и префикс в зависимости от входных данных.

 Смежные вопросы

  • Нет связанных вопросов^_^