21天学通C++之--String类的设计实现
来源:互联网 发布:男生背包推荐知乎 编辑:程序博客网 时间:2024/05/21 17:12
在c++中,自定义构造函数,运算符重载,析构函数,自定义函数,内存分配构成了这门语言知识的半壁江山,这里带给大家我的c++中string类的实现及要求
题目描述
模拟标准库字符串类实现你自己的字符串类。该类需具有构造,字符串连接、取子串和复制、赋值、输出等功能。要求使用动态分配存储字符串内容。不可使用STL string类
输入描述
测试程序有4个字符串,每个样例前两行含长度不超过200的俩字符串,赋值给前2个字符串对象,后面若干指令,每个指令占一行,分别由指令码和所需参数组成,空格分隔,每个指令码具有不同参数和意义; 指令有下述几种 : 指令P i代表输出字符串i; 指令A i j代表字符串i赋值给字符串j; 指令C i j k 代表将字符串i和字符串j连接后赋值给字符串k; 指令F i s l k代表从字符串i位置s开始的长度为l的子串赋值给字符串k;所有操作指令和参数肯定是有校的。
输出描述
每个字符串输出占1行
输入样例
Hello
HDU
P 1
P 2
C 1 2 3
P 3
F 3 5 3 4
P 4
输出样例
Hello
HDU
HelloHDU
HDU
#include <iostream>
#include <iomanip>
using namespace std;
class String{
private:
char *Data;
int Length;
public:
String();
String(String &str);
int GetLength() const;
int GetStrLength(char* const &str)const;
bool Resize(int const NewLength);
String& operator=(char* const &str);
String& operator=(String const &b);
String operator+(String const &b);
friend ostream& operator << (ostream& output,String& b);
String GetSubString(int start,int length);
~String();
};
String::String(){
Data=new char[2];
Data[0]='\0';
Length=0;
}
String::String(String &rpl){
if(!this->Resize(rpl.Length)){
cout<<"ERR"<<endl;
return;
}
for(int i=0;i<Length;i++){
this->Data[i]=rpl.Data[i];
}
this->Data[Length]='\0';
}
int String::GetLength() const{
return Length;
}
int String::GetStrLength(char* const &str) const{
char *tmp = str;
while (*tmp!='\0')
{
tmp++;
}
return int(tmp-str);
}
bool String::Resize(int const NewLength){
if(Data)
delete[] Data;
Data=new char[NewLength+1];
Length=NewLength;
return true;
}
String& String::operator=(char* const &str){
if(!this->Resize(this->GetStrLength(str))){
cout<<"ERR"<<endl;
return *this;
}
for(int i=0;i<Length;i++){
this->Data[i]=str[i];
}
this->Data[Length]='\0';
return *this;
}
String& String::operator=(String const &b){
if(!this->Resize(b.Length)){
cout<<"ERR"<<endl;
return *this;
}
for(int i=0;i<Length;i++){
this->Data[i]=b.Data[i];
}
this->Data[Length]='\0';
return *this;
}
String String::operator+(String const &b){
String c;
if(!c.Resize(this->Length+b.Length)){
cout<<"ERR"<<endl;
return *this;
}
for(int i=0;i<this->Length;i++){
c.Data[i]=this->Data[i];
}
for(int i=0;i<b.Length;i++){
c.Data[c.Length-b.Length+i]=b.Data[i];
}
c.Data[c.Length]='\0';
return c;
}
ostream& operator << (ostream& output,String& b){
if(b.Data!=0)
output<<b.Data;
return output;
}
String String::GetSubString(int start, int length){
String c;
char* SubString;
SubString=new char[length+1];
for(int i=0;i<length;i++){
SubString[i]=this->Data[start+i];
}
c=SubString;
c.Data[length]='\0';
return c;
}
String::~String(){
if(Data){
delete[] Data;
Data=NULL;
}
}
int main() {
char n[201],m[201];
char comm;
int i,j,k,l;
String s[4];
cin.getline(n,200);
cin.getline(m,200);
s[0]=n;
s[1]=m;
while(cin>>comm){
switch (comm){
case 'P':
cin>>i;
cout<<s[i-1]<<endl;
break;
case 'A':
cin>>i>>j;
s[j-1]=s[i-1];
break;
case 'C':
cin>>i>>j>>k;
s[k-1]=s[i-1]+s[j-1];
break;
case 'F':
cin>>i>>j>>k>>l;
s[l-1]=s[i-1].GetSubString(j, k);
break;
default:
break;
}
}
return 0;
}
题目描述
模拟标准库字符串类实现你自己的字符串类。该类需具有构造,字符串连接、取子串和复制、赋值、输出等功能。要求使用动态分配存储字符串内容。不可使用STL string类
输入描述
测试程序有4个字符串,每个样例前两行含长度不超过200的俩字符串,赋值给前2个字符串对象,后面若干指令,每个指令占一行,分别由指令码和所需参数组成,空格分隔,每个指令码具有不同参数和意义; 指令有下述几种 : 指令P i代表输出字符串i; 指令A i j代表字符串i赋值给字符串j; 指令C i j k 代表将字符串i和字符串j连接后赋值给字符串k; 指令F i s l k代表从字符串i位置s开始的长度为l的子串赋值给字符串k;所有操作指令和参数肯定是有校的。
输出描述
每个字符串输出占1行
输入样例
Hello
HDU
P 1
P 2
C 1 2 3
P 3
F 3 5 3 4
P 4
输出样例
Hello
HDU
HelloHDU
HDU
#include <iostream>
#include <iomanip>
using namespace std;
class String{
private:
char *Data;
int Length;
public:
String();
String(String &str);
int GetLength() const;
int GetStrLength(char* const &str)const;
bool Resize(int const NewLength);
String& operator=(char* const &str);
String& operator=(String const &b);
String operator+(String const &b);
friend ostream& operator << (ostream& output,String& b);
String GetSubString(int start,int length);
~String();
};
String::String(){
Data=new char[2];
Data[0]='\0';
Length=0;
}
String::String(String &rpl){
if(!this->Resize(rpl.Length)){
cout<<"ERR"<<endl;
return;
}
for(int i=0;i<Length;i++){
this->Data[i]=rpl.Data[i];
}
this->Data[Length]='\0';
}
int String::GetLength() const{
return Length;
}
int String::GetStrLength(char* const &str) const{
char *tmp = str;
while (*tmp!='\0')
{
tmp++;
}
return int(tmp-str);
}
bool String::Resize(int const NewLength){
if(Data)
delete[] Data;
Data=new char[NewLength+1];
Length=NewLength;
return true;
}
String& String::operator=(char* const &str){
if(!this->Resize(this->GetStrLength(str))){
cout<<"ERR"<<endl;
return *this;
}
for(int i=0;i<Length;i++){
this->Data[i]=str[i];
}
this->Data[Length]='\0';
return *this;
}
String& String::operator=(String const &b){
if(!this->Resize(b.Length)){
cout<<"ERR"<<endl;
return *this;
}
for(int i=0;i<Length;i++){
this->Data[i]=b.Data[i];
}
this->Data[Length]='\0';
return *this;
}
String String::operator+(String const &b){
String c;
if(!c.Resize(this->Length+b.Length)){
cout<<"ERR"<<endl;
return *this;
}
for(int i=0;i<this->Length;i++){
c.Data[i]=this->Data[i];
}
for(int i=0;i<b.Length;i++){
c.Data[c.Length-b.Length+i]=b.Data[i];
}
c.Data[c.Length]='\0';
return c;
}
ostream& operator << (ostream& output,String& b){
if(b.Data!=0)
output<<b.Data;
return output;
}
String String::GetSubString(int start, int length){
String c;
char* SubString;
SubString=new char[length+1];
for(int i=0;i<length;i++){
SubString[i]=this->Data[start+i];
}
c=SubString;
c.Data[length]='\0';
return c;
}
String::~String(){
if(Data){
delete[] Data;
Data=NULL;
}
}
int main() {
char n[201],m[201];
char comm;
int i,j,k,l;
String s[4];
cin.getline(n,200);
cin.getline(m,200);
s[0]=n;
s[1]=m;
while(cin>>comm){
switch (comm){
case 'P':
cin>>i;
cout<<s[i-1]<<endl;
break;
case 'A':
cin>>i>>j;
s[j-1]=s[i-1];
break;
case 'C':
cin>>i>>j>>k;
s[k-1]=s[i-1]+s[j-1];
break;
case 'F':
cin>>i>>j>>k>>l;
s[l-1]=s[i-1].GetSubString(j, k);
break;
default:
break;
}
}
return 0;
}
0 1
- 21天学通C++之--String类的设计实现
- [C++]String类的实现
- [C++]String类的实现
- [C++]String类的实现
- C++String类的实现
- 【c++】string类的实现
- C++string类的实现
- C++string类的实现
- C++String类的实现
- C++string类的实现
- C/C++string类的实现
- 简单模仿string类的设计实现.
- C++string类的一个实现
- C++string类的简单实现
- c++string类的简单实现
- C++—String类接口的实现
- 【C/C++】String类实现
- C++STL之string类的使用
- 遥想宇宙
- JAVA简单实现停车场系统
- 【C语言】指针和数组
- PHP ajax跨域解决
- DirectFB学习之移植到nuc972平台
- 21天学通C++之--String类的设计实现
- HDU 2354 Another Brick in the Wall
- 实时
- HPU
- redis 跟踪内存使用率
- Linux with Buildroot
- L2-001. 紧急救援
- cassandra-driver-python
- L2-002. 链表去重