1

重複の可能性:
分数クラス C++ のオーバーロード >>

そのため、コマンド ラインから 1 行読み込む必要があります。

指示を出力し、入力を求めます。以下のように見えます。

最初の分数を入力してください: 8/27

要点は、istream >> をオーバーロードして、分子として 8 を、分母として 27 を分数クラスに投入できるようにすることですが、どうすればよいかわかりません。.getline を試し、char から int に変換しようとしましたが、8 THEN THEN 27 を入力してすべてが機能しましたが、入力として '8/27' を取得できません。私がどこに向かっているべきかについて何かアドバイスはありますか?

4

3 に答える 3

2

から任意のデータを取得し、std::istream変換できる限り任意の型に入れることができます。

整数を読み取り、文字を無視してから、別の整数を読み取ります。

無視したいものについては、ダミー変数に読み込みます。

ギャップを埋めるためのテストコードを次に示します。

#include <sstream>
#include <iostream>

class Fraction {};

using std::istream;

istream& operator>>(istream& is, Fraction& fraction) {
    int numerator;
    int denominator;
    char dummy;

    is >> numerator;
    is >> dummy;
    is >> denominator;
}

using std::iostringstream;
using std::cout;
using std::endl;

int main() {
    iostringstream input;
    input << "8/27";

    Fraction fraction;
    input >> fraction;

    return 0;
}
于 2012-12-13T09:18:51.003 に答える
1

ここで std::regex クラスを強制的に適合させるだけです:)。

int main() {
#ifdef APPROACH_1
    int num, den;
    char c;
    std::cin >> num >> c >> den;
    std::cout << static_cast<double>(num)/den;

#else
    std::regex regex("( *)([0-9]+)( *)/( *)([0-9]+) *");
    std::string inputstr;
    std::smatch match;

    std::cout << "Enter string";
    std::getline(std::cin, inputstr);

    bool matched = std::regex_search(inputstr, match, regex);

    if(matched)
    {
        std::string nums = std::string(match[2].first, match[2].second);
        std::string dens = std::string(match[5].first, match[5].second);

        std::cout << nums << " " << dens << std::endl;

        std::stringstream ss1(nums), ss2(dens);
        int num, den;

        ss1 >> num;
        ss2 >> den;

        std::cout << static_cast<double>(num)/den;
    }
    else
        std::cout << "Oops" << std::endl;
#endif

}
于 2012-12-13T09:27:04.470 に答える
1

このようなものはそれを行うでしょう...

struct Fraction
{
    int numerator;
    int denominator;
};
std::istream & operator >> ( std::istream &s, Fraction & f ) {
    s>>f.numerator;
    char c;
    s>>c;
    s>>f.denominator;
    return s;
}


int main()
{
    std::stringstream s( "1/3 3/4");
    Fraction f1, f2;
    s>>f1;
    s>>f2;

    return 0;
}
于 2012-12-13T09:15:32.517 に答える