请教更好更快获得输入的字符串流长度的方法?

qnjian 2004-12-01 01:12:17
我自定义了一个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的方法我觉得也不够理想。问:有没有快速取得输入流长度的方法,这样我就可以根据输入的流分配恰好的内存空间?请赐教,不胜感激!
...全文
80 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
qnjian 2004-12-04
  • 打赏
  • 举报
回复
怎么没人回答呀?!
dot99 2004-12-04
  • 打赏
  • 举报
回复
内存不够了,再添。。。。。。realloc..

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧