我有一個字串類。我想多載運算子 >>。找到了以下方法,但據我所知,最后沒有添加零字符(行終止符)。我怎樣才能寫出一個好的運算子 >>?
class String {
public:
char* str;
size_t size;
size_t capacity;
~String();
String(const char*);
friend std::istream& operator>>(std::istream&, String&);
};
std::istream& operator>>(std::istream& is, String& obj) {
is.read(obj.str, obj.size);
return is;
}
uj5u.com熱心網友回復:
讓我們從顯而易見的部分開始:您operator>>需要String根據您讀取的輸入實際創建一個有效的物件。假設您要讀取整行輸入作為字串(停在換行符或最大字符數處)。
目前,我將假設strany的成員String要么是一個空指標,要么是一個指向已分配的資料的指標new。
std::istream &operator>>(std::istream &is, String &obj) {
static char buffer[max_size];
is.getline(buffer, max_size);
std::size_t size = std::strlen(buffer);
if (size > 0) {
if (size > obj.size) {
delete [] obj.str;
obj.str = new char [size 1];
obj.capacity = size;
}
strcpy(obj.str, buffer);
obj.size = size;
}
return is;
}
這并不是為了處理所有極端情況(例如,它沒有錯誤處理),但至少給出了一般的想法——你需要閱讀文本,檢查你是否有足夠的空間來存盤文本,如果需要,分配更多,將文本復制到(現有或新分配的)空間中,并將大小至少更新為當前大小,如果重新分配,容量也更新到更新的容量。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/345574.html
