c++实现的一个数组串
数组串类ArrayString源码:
#pragma once class ArrayString { public: //构造函数 ArrayString(void) { maxSize = 100; list = new char[maxSize]; for(int i=0;i<maxSize;i++) list[i] = '\0'; } //带参构造函数 ArrayString(char * s) { maxSize = 100; list = new char[maxSize]; int i; *this = s; //运算符=重载,用char串赋值 } //获取串的长度 int GetLength() { int length = 0; while(list[length++]!='\0'); return length-1; } //返回字符串的内容 char * ToString() { return list; } //用char串赋值 void operator=(char * s2) { int i ; for(i=0;s2[i]!='\0';i++) list[i] = s2[i]; list[i] = '\0'; } //用ArrayString赋值 void operator=(ArrayString * s2) { int i ; for( i=0;s2->list[i]!='\0';i++) list[i] = s2->list[i]; list[i] = '\0'; } //将s2拼接到ArrayString后面 void Concat(ArrayString s2) { int len1 = this->GetLength(); int len2 = s2.GetLength(); if(len1+len2>maxSize-1) return; for(int i = len1;i<len1+len2&&i<maxSize-1;i++) this->list[i]=s2.list[i-len1]; list[len1+len2] = '\0'; } //求子串 ArrayString * SubStr(int index,int length) { ArrayString * s = new ArrayString(); if(index>=0&&index+length<=GetLength()) { for(int i =0;i<length;i++) s->list[i]=list[index+i]; s->list[length] = '\0'; } return s; } //比较串的大小 int Compare(ArrayString s2) { int i =0; while(list[i]==s2.list[i]&&list[i]!='\0') i++; if(list[i]<s2.list[i]) return -1; else if(list[i]>s2.list[i]) return 1; return 0; } //求子串在主串中的位置 int IndexOf(ArrayString s2) { if(s2.GetLength()>this->GetLength()) return -1; int i; char f = s2.list[0]; for(i=0;i<=this->GetLength()-s2.GetLength();i++) { if(this->list[i]==f) if(s2.Compare(*SubStr(i,s2.GetLength()))==0) return i; } return -1; } //串的插入 void Insert(int index,ArrayString s2) { if(this->GetLength()+s2.GetLength()>maxSize) return; //超出数组最大容量 if(index>this->GetLength()) return; //插入位置超出数组长度 //从主串中index位置开始把后面的截取拼接到s2后面 s2.Concat(*SubStr(index,this->GetLength()-index)); //将主串index之前的截取出来再复值给主串 *this = *this->SubStr(0,index); //将s2拼接到主串后面 this->Concat(s2); } //串的删除 void Delete(int index,int length) { if(index>=this->GetLength()) return; if(index+length>this->GetLength()) return; ArrayString * rear = SubStr(index+length,this->GetLength()-index-length); *this = *this->SubStr(0,index); this->Concat(*rear); } //将主串中的指定段用指定的新字符串替换 void Replace(int index,int length, ArrayString s2) { Delete(index,length); Insert(index,s2); } ~ArrayString(void) { } private: int maxSize; char *list; };
测试代码:
char * str = "asdfsdfsdfsdfsdf"; ArrayString *str1 = new ArrayString("abcdefghijklmn"); ArrayString *str2 = new ArrayString("def"); //*str1 = str; //测试char赋值 //*str1 = str2; //测试ArrayString赋值 //std::cout<<str1->GetLength()<<std::endl; //测试获取长度 //str1->Concat(*str2); //测试拼接 //str1=str1->SubStr(3,3); //测试求子串 //int t = str1->Compare(*str2); //测试字符串的比较 //std::cout<<t<<std::endl; //int n = str1->IndexOf(*str2); //测试求子串在主串中的位置 //std::cout<<n<<std::endl; //str1->Insert(3,*str2); //测试串的插入 //str1->Delete(3,3); //测试删除 str1->Replace(2,5,*str2); //测试替换 std::cout<<str1->ToString()<<std::endl;