2012-12-13 44 views
1

可能重複:
overloading >> for a fraction class C++重載>>在分數讀

所以我需要在命令行一行讀取。

打印出說明,然後提示輸入。看起來如下。

鍵入您的第一部分:8/27

現在點我們應該超載的IStream >>能夠擲8成部分類作爲分子,27作爲分母,但我不能爲我的生活弄清楚如何。我試過.getline,並試圖從char轉換爲int,我已經得到了所有輸入8 THEN 27的輸入,但無法獲得'8/27'作爲輸入。有關我應該前往何處的任何建議?

+3

向我們展示您嘗試過的代碼。 –

+1

overload >>,並且在重載的>> do in >> num >> c >> denum其中num&denum是整數,而c是一個char – coyotte508

+0

到目前爲止你到底嘗試了什麼?請顯示你的代碼。你是否超載'''把你的'Fraction'類作爲參數?如果是這樣,那麼我可能會使用'>>(int)','>>(char)'和'>>(int)'來分別讀取各個值而不是單獨一行。 –

回答

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; 
} 
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; 
} 
1

只是爲了力配合的std ::正則表達式類:)。

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 

} 
+1

我知道這就像拿出一把劍在一根針上會做的:) – Chubsdad