Odczyt liczby w postaci ułamka z konsoli

0

Szukam sposobu do odczytu liczby wprowadzonej przez użytkownika (program konsolowy c++). Chcę, aby użytkownik mógł wprowadzić liczbę całkowitą, ale również liczbę w postaci ułamka(np. 3/4).
Z ułamkiem mam problem, ponieważ mając np. 3/4 muszę wyodrębnić osobno 3 i 4 (każda z wartości jest brana do innej funkcji), a nie chciałbym, aby trzeba było wprowadzać sztucznie 1/1, tylko aby program przyjmował obie wersje.

Myślałem jeszcze o tym, żeby móc wprowadzać liczby zmiennoprzecinkowe, ale przede wszystkim zależy mi na wyżej przedstawionej sprawie.

1
class Fraction {
  ....
};

std::istream& operator>>(std::istream& input, Fraction& frac)
{
    int a;
    if (input >> a >> std::ws) {
        if (input.peek() == '/' && input.get()) {
            int b;
            if (input >> b) {
                frac.set(a, b);
            } else {
                input.clear();
                input.unget('/');
                frac = a;
            }
        } else {
            frac = a;
        }
    }
    return input;
}
1
#include <iostream>
#include <string>

double spitDouble(std::string const& input)
{
	auto pos = input.find('/');
	if(pos != std::string::npos) {
		auto whole = std::stoi(input.substr(0, pos));
		auto fraction = std::stoi(input.substr(pos + 1, input.size()));
		return 1.0 * whole / fraction;
	}

	return std::stod(input);
}

int main()
{
	std::string s1 { "1.2" };
	std::string s2 { "1/2" };
	std::string s3 { "-1.2" };
	std::string s4 { "-3/4" };

	std::cout << spitDouble(s1)
			  << "\n" << spitDouble(s2)
			  << "\n" << spitDouble(s3)
			  << "\n" << spitDouble(s4);

    return 0;
}

https://wandbox.org/permlink/1MFmbHiqXWyw3EOi

1 użytkowników online, w tym zalogowanych: 0, gości: 1