以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 C/C++编程思想 』  (http://bbs.xml.org.cn/list.asp?boardid=61)
----  [求助]请教一个c++程序问题  (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=68035)


--  作者:segeon
--  发布时间:10/9/2008 10:46:00 AM

--  [求助]请教一个c++程序问题
我写的一个合并顺序表的程序有问题,可看了半天也没弄明白,请高人指点。。。
//定义一个动态数组类,该类可实现自动管理数组大小
#include<assert.h>

#define maxSize 10
#define increment 10

template <class T>
class DynamicArray
{
private:
 int size;               //数组目前大小
 T* elem;                 //数组元素
public:
 DynamicArray();          //构造函数
    ~DynamicArray();
 void AddElem(T a); //往数组中添加新的元素,若发现数组已满,则自动分配新的存储空间
 int GetLength();//返回数组的当前长度
 T* GetHead();

};

template <class T>
DynamicArray <T>::DynamicArray()
{
 size = 0;
 elem = new T[maxSize];
 assert(elem);
 cout<<"constructor ok!";
}

template <class T>
DynamicArray <T>::~DynamicArray()
{
 delete [] elem;
}

template <class T>
void DynamicArray <T>::AddElem(T a)
{
 int i,len=size;
 T* temp;
 if (size >= maxSize)
 {//判断数组的现有长度,如果超过了允许的最大值则为数组分配新的存储空间
 len += increment;
 temp=new T[len];
 assert(temp);
 for ( i=0;i<size;i++)
  temp[i]=elem[i];
 delete[] elem;
 elem = new T[len];
 //assert (elem);
 i=0;
 while ( i< size ) elem[i++] = temp[i++];
 delete[] temp;
 elem[size] = a;}
 elem[size] = a;
 size++;
}

template <class T>
int DynamicArray <T>::GetLength()
{
 return size;
}

template <class T>
T* DynamicArray<T>:: GetHead()
{
 return elem;
}

-----------------------
//比较两个顺序表的大小
#include <iostream>
#include "dynamicArray.h"
using namespace std;


int Compare(DynamicArray<char> a,DynamicArray<char> b)
{
char* pa,*pb;
pa=a.GetHead();
pb=b.GetHead();
while ( *pa && *pb && *pa == *pb ) { pa++; pb++; }
if ( !*pa && !*pb ) return 0;//两个字符数组相等
if ( *pa == NULL && *pb != NULL) return -1; //说明a<b
if ( *pa && *pb && *pa<*pb ) return -1; //也说明a<b
return 1; //否则a>b
}

int main()
{
 DynamicArray<char> array1,array2;
 char ch;
 cout<<"请输入第一个字符数组,以“*”结束:"<<endl;
 cin>>ch;
 while ( ch != '*')
 {array1.AddElem(ch); cin>>ch;}
 cout<<"请输入第二个字符数组,以“*”结束:"<<endl;
 cin>>ch;
 while ( ch != '*')
 {array2.AddElem(ch);cin>>ch;}
 switch ( Compare( array1,array2 ))
 {
 case 0 : cout<<"两个数组相等!";break;
 case -1: cout<<"第一个数组小于第二个数组";break;
 case 1: cout<<"第一个数组大于第二个数组";break;
 default: cout<<"有错误!";break;
 }

}


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
6,595.703ms