请教更好更快获得输入的字符串流长度的方法?
我自定义了一个String类,并能过声明友元函数的形式重载了操作符“>>”。以下是类的定义,并只附上其默认构造函数及重载函数:
class String
{
public:
//constructors
String();
String(const char *const);
String(const String &);
~String();
//overloaded operators
char & operator[](unsigned short offset);
char operator[](unsigned short offset) const;
String operator + (const String &);
void operator += (const String &);
String & operator=(const String &);
//use friend function to overload operator"<<" and ">>"
friend ostream& operator<<(ostream& theStream, String& theString);
friend istream& operator>>(istream& theStream, String& theString);
//General accessors
unsigned short GetLen()const {return itsLen;}
const char * GetString()const {return itsString;}
private:
String (unsigned short);//private constructor
char * itsString;
unsigned short itsLen;
};
String::String()
{
itsString=new char[1];
itsString[0]='\0';
itsLen=0;
}
istream& operator>>(istream& theStream, String& theString)
{
char temp[256];
theStream>>temp;
theString.itsLen=strlen(temp);
delete [] theString.itsString;
theString.itsString=new char[theString.itsLen+1];
//theStream>> theString.itsString;
strcpy(theString.itsString,temp);
return theStream;
}
其实,本来重载函数中,只需要保留注释了的及return语句就可以的,如果构造函数中itsString分配了足够的内存空间的话。但是我的目的是尽可能根据实际需要分配足够且刚好的内存。因此,重载
函数中利用临时数组temp的方法我觉得也不够理想。问:有没有快速取得输入流长度的方法,这样我就可以根据输入的流分配恰好的内存空间?请赐教,不胜感激!