2012-03-25 61 views
0

這是作業分配的一部分。我不想要一個答案只是幫助。我必須創建一個名爲MyInt的類,它可以存儲任何大小的正整數。我只能使用cstring cctype iomanip和iostream庫。我真的不明白,即使從哪裏開始。覆蓋>>像int這樣的運算符

6)創建提取操作符>>的重載,用於從輸入流讀取整數。這個操作符應該忽略數字前的任何前導空格,然後讀取連續的數字,直到遇到非數字(這與正常int的>>起作用的方式相同,所以我們希望以同樣的方式使我們的工作成爲可能)。該操作員只應提取並存儲對象中的數字。在數字之後遇到的「第一個非數字」可能是下一個輸入的一部分,所以不應該提取。您可能會認爲輸入中的第一個非空白字符是數字。即當您要求輸入號碼時,您不必錯誤檢查是否輸入不合適的類型(如字母)。

示例:假設執行以下代碼,並且輸入類型爲「12345 7894H」。

MyInt x,y; char ch; cin >> x >> y >> ch; x的值現在應該是12345,y的值應該是7894,ch的值應該是'H'。

我的代碼的最後的狀態如下:

istream& operator>>(istream& s, MyInt& N){ 
N.Resize(5); 
N.currentSize=1; 
char c; 
int i = 0; 
s >> c; 
N.DigitArray[i++] = C2I(c); 
N.currentSize++; 
c = s.peek(); 
while(C2I(c) != -1){ 
    s >> c; 
    if(N.currentSize >= N.maxSize) 
     N.Resize(N.maxSize + 5); 
    N.DigitArray[i] = C2I(c); 
    i++; 
    N.currentSize++; 
} 
} 

它幾乎作品!現在它抓住了正確的號碼,但當我輸入時它並沒有結束,我必須輸入一個字母才能結束。

+0

http://stackoverflow.com/questions/9833112/bigint-implementation-converting-a-string-to-binary-representatio-stored-as-un/9833145#9833145 – 2012-03-25 02:06:49

回答

1

您可以創建一個operator>>重載類這種方式(作爲一個自由函數,而不是裏面的類):

std::istream& operator>>(std::istream& lhs, MyInt& rhs) { 
    // read from lhs into rhs 

    // then return lhs to allow chaining 
    return lhs; 
} 

您可以使用會員peekistreamread字符閱讀, isspace測試一個字符是否爲空格,isdigit檢查字符是否是一個數字(isspaceisdigit位於<cctype>標頭中)。

+0

如何將每個字符轉換爲istream ? – easyxtarget 2012-03-25 02:10:51

+0

@ user1289423'cin >> myint'和'operator >>(cin,myint)'是一樣的,所以當你做'cin >> myint'時'istream'是'cin'(當'myint'是' MyInt')。角色將從用戶進入控制檯的內容出現。 – 2012-03-25 02:11:53

+0

因此,假設我可以從他們的流中挑出數字,那麼我如何獲取這些數字序列,將它們保存在一個以數字爲單位的int數組中,然後將其保存在對象中。 – easyxtarget 2012-03-25 02:17:22