发布时间 : 星期三 文章《C%2B%2B数组与指针习题》更新完毕开始阅读1efc0cd233d4b14e85246870
数组与指针习题 9
return string; }
char *itoa1 (int n,char *string){
if(n/10) string=itoa1(n/10,string);//隐式循环
*string++=n+48;//第一次是数字最高位放串的最前面的字符(不含符号),注意指针移动在后
*string='\\0';
return string;//注意返回的指针已后移一字符 }
char *itoa0 (int n,char *string){ if(n<0){
*string++='-'; n=-n; }
itoa1(n,string); return string; }
void main(){ int num; char st[20]; cin>>num;
cout<
cout< 5.10 头文件 struct tm{ int tm_sec; //秒 int tm_min; //分 int tm_hour; //时 int tm_mday; //日 int tm_mon; //月 int tm_year; //年,实际放的是与1970年的差,如1990年为20 int tm_wday; //星期 int tm_yday; //一年中的第几天 int tm_isdst; //是否夏时制 }; 函数 time_t time(time_t *tp)是提取当前时间,time_t即长整型,代表从1970年1月1日00:00:00开始计算的秒数(格林尼治时间),放在首地址为tp的单元内。 函数 tm *localtime(const time_t *tp) 将tp地址单元中的时间转换为日期时间结构的当地时间;(函数 tm *gmtime(const time_t *tp)转换为日期时间结构的格林尼治时间;) 函数 char *asctime(tm *tb)将tb地址单元中的tm结构的日期时间转换为字符串(供显示),它有固有格式,如: 数组与指针习题 10 Sun Sep 16 01:03:52 1973 利用以上资源,重新设计一个日期时间类(DataTime),要求定义对象时取当前时间进行初始化,显示时重取显示时刻的时间并显示出来。 解: #include datatime(){ time(&allsecond); timedata=localtime(&allsecond); tmp=asctime(timedata); cout< void gettime(){ allsecond=time(NULL);//time有两种用法 timedata=localtime(&allsecond); tmp=asctime(timedata); cout< void main(){ char ch; datatime dt; cout<<\需要知道现在的日期和时间吗?(Y或N)\ cin>>ch; if(ch=='y'||'Y') dt.gettime(); } 5.11 完善自定义字符串类mystring,函数包括:构造函数、拷贝构造函数、析构函数,并 重载运算符[ ],=(分别用mystring和C字符串拷贝),+(strcat),+=,<,==(strcmp)。 解: 此例既是对第5章的复习也是一个提高。拷贝构造函数的应用请参阅4.4.2节末尾两项说明,本例形参使用引用,仅在返回时调用了拷贝构造函数。运算符的重载请参阅4.5节。 #include mystring(){ 数组与指针习题 11 }; mystring mystring::operator=(mystring & ms){ last=-1; do{ last++; string[last]=ms.string[last]; }while(last last=-1; maxsize=n; string[0]='\\0'; cout<<\缺省构造函数\} mystring(char *s){//本例为了简化,健壮性并不好 last=-1; maxsize=n; do{ last++; string[last]=s[last]; }while(s[last]!='\\0'); cout<<\构造函数\} mystring(mystring & ms){ last=-1; maxsize=n; do{ last++; string[last]=ms.string[last]; }while(last cout<<\拷贝构造函数\} ~mystring(){ cout<<\析构函数\} void show(){ //如需重载<<,则请参见9.3节,暂时未学到,替代的方法是改用一个show()函数 cout< mystring operator=(mystring &); mystring operator+(mystring &); mystring operator+=(mystring &); bool operator<(mystring &); bool operator==(mystring &); 数组与指针习题 12 mystring mystring::operator+(mystring & ms){//注意+和+=的不同 mystring temp(*this); int i=-1; temp.last--;//串的结尾是结束符,连接时要覆盖掉 do{ temp.last++; i++; temp.string[temp.last]=ms.string[i]; }while(i mystring mystring::operator+=(mystring & ms){ int i=-1; last--;//串的结尾是结束符,连接时要覆盖掉 do{ last++; i++; string[last]=ms.string[i]; }while(i bool mystring::operator<(mystring & ms){ int i=0,k; do{ k=string[i]-ms.string[i]; i++; }while(k==0&&i if(i==last&&i!=ms.last) return true; return false; } bool mystring::operator==(mystring & ms){ int i=0,k; if(last!=ms.last) return false; do{ k=string[i]-ms.string[i]; i++;