Летом я задал себе домашнее задание, и проект, который я закончил на 98%, застопорился из-за одной этой проблемы.
У меня есть класс под названием Mixed. Он содержит данные членов для целого числа, числителя и знаменателя. Мне нужно перегрузить все общие операторы, чтобы разрешить умножение, сложение, сравнение и потоковую передачу объектов типа Mixed. У меня перегружены все операторы, кроме >> (оператор извлечения).
Все смешанные числа будут прочитаны в формате целый числитель/знаменатель.
ex: 1 2/3, 0 7/8, -3 18/5, 0 -1/89
Заголовок: friend istream& operator>> (istream &, Mixed);
CPP-файл: istream& operator>> (istream &in, Mixed m) {...}
Для задания я ограничен библиотеками iostream и iomanip. Мой план состоял в том, чтобы считывать значения из потока и присваивать их временным переменным типа int (w, n, d), которые я затем использовал с конструктором Mixed для создания объекта m. К сожалению, я не могу придумать, как разделить числитель и знаменатель. Они оба целые, но между ними есть символ (/).
- Я не могу использовать getline() с его разделителем, потому что он присваивает данные массиву char, который я не верю, что смогу преобразовать в int без другой библиотеки.
- Я не могу использовать массив символов, а затем сегментировать его по той же причине.
- Я не могу использовать цикл while с get() и peek(), потому что, опять же, я не думаю, что смогу преобразовать массив char в int.
- Я не могу использовать строку или c-строку, а затем сегментировать ее, потому что для этого требуются внешние библиотеки.
Еще раз, мне нужно разделить значение типа "22/34" на 22 и 34, используя только iostream и iomanip. Есть ли какой-то довольно очевидный метод, который я пропускаю? Есть ли способ неявного преобразования с помощью указателей?
stringstream
иstring
? - person jrok   schedule 20.08.2012<complex>
, там есть пример чтения формата(22,34)
. Можно использовать как вдохновение! - person Bo Persson   schedule 20.08.2012