首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

解读一段C++代码,多谢指教了

2012-02-07 
解读一段C++代码,谢谢指教了看了许久,一直有点晕,程序是从键盘输入一串字符忽略空格回车输入$ENTER结束再

解读一段C++代码,谢谢指教了
看了许久,一直有点晕,程序是从键盘输入一串字符忽略空格回车输入$ENTER结束再屏幕输出。。。望高手解读下,越详细越好,先谢谢啦。。。

#include   <iostream>
using   namespace   std;

class   Array{
char   *p;
int   len;
public:
Array(int   n):len(0),p(NULL){
resize(n);
}
void   resize(int   n){
char*   q=new   char[n];
int   min=(n <len?n:len);
if(p!=NULL){
for(int   i=0;   i <min;   i++)
q[i]   =   p[i];
delete[]   p;
}
p   =   q;
for(int   i=min;   i <n;   i++)
p[i]   =   '\0 ';
len   =   n;
}
void   set(int   index,   char   value){
if(index <0||index> =len){
cout   < <   "ERR: "   < <   index   < <   endl;
return;
}
p[index]   =   value;
}
char   get(int   index){
if(index <0||index> =len){
cout   < <   "ERR: "   < <   index   < <   endl;
return   '! ';
}
return   p[index];
}
int   size(){
return   len;
}
~Array(){
if(p!=NULL){
delete[]   p;
p   =   NULL;
}
}
};
int   main()
{
Array   a1(10);
cout   < <   "input   chars(end   by   '$ '): ";
for(int   i=0;;i++){
char   ch;
cin   > >   ch;
if(ch== '$ ')
break;
else   if(i+1> a1.size())
a1.resize(i+10);
a1.set(i,   ch);
}
for(int   i=0;   i <a1.size();   i++)
cout   < <   a1.get(i);
cout   < <   endl;
}


[解决办法]
void resize(int n){
char* q=new char[n];//超过默认长度为10的空间后就分配一个更大的空间
int min=(n <len?n:len);//实际上min =len;不会发生n <len情况
if(p!=NULL){ //如果之前已经分配了一定空间
for(int i=0; i <min; i++)
q[i] = p[i];//把内容复制到更大的新的空间
delete[] p; //删除原来分配的空间
}
p = q; //重新获得P
for(int i=min; i <n; i++)
p[i] = '\0 ';//将P的值(或者剩余值,重新分配更大内存时)初始话,
len = n; //设置当前长度
}

[解决办法]
个人意见,抱着学习态度。首先这是一个自定义的字符串(数组)类,构造函数进行初始化(数组大小等),接着resize(int n)重新调整数组的大小(是在拷贝原有数组的前提下,将原有数组扩大), set(int index,char value )设置具体某一个字符,get(int index)获取具体数组下标的值,size()获取字符数组的大小,析构函数删除动态分配的空间,再来说说测试函数,正如你所说那样程序是从键盘输入一串字符忽略空格回车输入$ENTER结束再屏幕输出。。。,这主要是cin> > char不能读取空格输入,进而没有保存到数组中,直到遇到$才退出,最后显示出来,这其中还包括数组的动态调整。这是我的一点分析,希望你能满意。

热点排行