求C++高手帮忙,感激不尽..........帮上忙的,给出我的全部财富家产,虽然不多的说...

自定义一个String 类用来存储字符串,串中的字符存放在动态分配的数组中,该类
拥有以下成员函数:
构造函数:为对象分配动态存储空间,完成初始化,要考虑多种参数的重载形式,例如
无参数、参数类型为char 或char*;
析构函数:将占用的动态存储空间释放;
拷贝构造函数:实现String 对象之间的深拷贝构造;
IsSubstring 函数:判断参数是否为当前串的子串,参数可以为char*或String 类型;
Str2Num 函数:将数字字符串转成数值;
UpperStr 函数:将字符串中的小写字母均转为大写字母;
ReplaceStr 函数:替换String 中的某个字符串;
ReplaceChar 函数:替换String 中的某个字符;
DelStr 函数:删除String 中的某个字符串;
DelChar 函数:删除String 中的某个字符;
重载了以下运算符:
= 运算符:实现String 对象之间的深拷贝赋值;
+ 运算符:将两个String 对象首尾相连;
[] 运算符:访问String 对象中某个下标位置的字符;
<<运算符:输出String 对象;
自行设计类中的数据成员和其它内容,并编写测试代码使用该Sting 类。
最新回答
伪装者

2024-10-30 14:33:48

std名字空间中有string类。
追问
呃....这个不是关键,String大写了就没事吧,这个是我的期末作业,大虾能帮忙吗
追答
写起来太长,没有那么多时间。很抱歉。
逗比卖萌无所不能

2024-10-30 12:46:10

#include<iostream.h>
#include<string.h>
#include<assert.h>
class String
{
private:
char * str;
int size;
public:
String();//创建一个空字符串
String(char *s);//创建一个初值为s的字符串
~String();//消除改串的实例
void print();//输出
String substr(int pos,int n);//从位置pos开始提取一个长度为n的子串
int length();//返回串的长度
int isempty();//判断串是否为空
void clear();//把串清空
String append(const char c);//在串尾添加字符
String insert(const char c,const int index);//在串中给定位置插入一个字符
String concatenate(const char *s);//把串s接在本串后面
int find(const char c,const int start);//从位置start开始搜寻一个给定字符
String copy(const char *s);//将一个s串复制到本串
};
String::String()
{
size=0;
str=NULL;
}
String::~String()
{ }
String::String(char *s)
{
size=strlen(s);
str=new char[size+1];
assert(str!='\0');
strcpy(str,s);
}
void String::print()
{
if(str!=NULL)
cout<<str<<endl;
else
cout<<"空串"<<endl;
}
String String:: substr(int pos,int n)
{
int i;
int left=size-pos;
String tmp;
char *p,*q;
if(pos>=size)
return NULL;
if(n>left)
n=left;
delete[] tmp.str;
tmp.str=new char[n+1];
assert(tmp.str!=NULL);
p=tmp.str;
q=&str[pos];
for(i=0;i<n;i++)
*p++=*q++;
*p='\0';
tmp.size=n;
cout<<tmp.str<<endl;
return tmp;
}
int String::isempty()
{
if (str=='\0')
{
cout<<"空窜"<<endl;
return 1;
}
return 0;
}
int String::length()
{
return size;
}
void String::clear()
{
str=NULL;
size=0;
}
String String::append(const char c)
{
String tt;
tt.str=new char(size+2);
assert(tt.str!='\0');
tt.str[size+1]='\0';
strcpy(tt.str,str);
tt.str[size]=c;
str=new char(size+2);
assert(str!='\0');
strcpy(str,tt.str);
size=size+1;
cout<<str<<endl;
return str;

}
String String::insert(const char c,const int index)
{

String tt;
tt.str=new char(size+2);
assert(tt.str!='\0');
tt.str[size+1]='\0';
strcpy(tt.str,str);
if(index>size)
cout<<"插入失败"<<endl;
else
{
for(int i=size;i>index;i--)
tt.str[i]=tt.str[i-1];
tt.str[index]=c;
str=new char(size+2);
strcpy(str,tt.str);
size=size+1;
cout<<str<<endl;
}
return str;
}
String String::concatenate(const char *s)
{
String tt;
char *p;
tt.str=new char(size+strlen(s)+1);
assert(tt.str!='\0');
tt.str[size+strlen(s)]='\0';
strcpy(tt.str,str);
p=&tt.str[size];
strcpy(p,s);
str=new char(size+strlen(s)+1);
strcpy(str,tt.str);
size=size+strlen(s);
cout<<str<<endl;
return str;
}
int String::find(const char c,const int start)
{
if(start<0 || start>size)
{
cout<<"查询失败"<<endl;
return 0;
}
int i=start;
while(str[i]!=c && i<=size)
i++;
if(str[i]==c)
{
cout<<i<<endl;
return 1;
}
if(i>size)
{
cout<<"查找失败"<<endl;
return 0;
}
}
String String::copy(const char *s)
{
String tt;
tt=new char(strlen(s)+1);
assert(tt.str!='\0');
strcpy(tt.str,s);
str=tt.str;
cout<<str<<endl;
return tt;
}
void main()
{
String a("jhg");
a.concatenate("aaaa");
a.insert('w',3);
//a.concatenate("aaaa");
a.append('q');
a.concatenate("aaaa");
}
我运行过正确 不过没用重载
追问
谢谢你了 (*^__^*) ……可是必须用重载的.....而且运行有错误 我用的Dev-C++
雨后初见彩虹

2024-10-30 08:06:41

没有全部测试,你先看看,有问题再提!
//String.h
#ifndef STRING_H
#define STRING_H
#include <iostream>
using namespace std;
#define string String
class string{
public:
char* str;

string();
string(char ch);
string(char* text);
~string();
string(const string& astring);
int IsSubstring(char* str);
int IsSubstring(string& astring);
int Str2Num();
void UpperStr();
void ReplaceStr(char* str1,char* str2);
void ReplaceChar(char ch1,char ch2);
void DelStr(char* string);
void DelChar(char ch);
string& operator=(string& astring);
string& operator+(string& astring);
char operator[](int index);
friend ostream& operator<<(ostream& out,string& astring);
};
#endif

//String.cpp
#include "string.h"
#include <cassert>
#include <iostream>
#include <cmath>
using namespace std;
#define string String
string::string()
{
str=new char[30];
};
string::string(char ch)
{
str=new char[30];
for(int i=0;i<30;i++)
{
str[i]=ch;
}
};
string::string(char* text)
{
str=new char[strlen(text)+1];
strcpy(str,text);
};
string::~string()
{
delete []str;
};
string::string(const string& astring)
{
str=new char[strlen(astring.str)+1];
strcpy(str,astring.str);
};
int string::IsSubstring(char* astr)
{
return strcmp(str,astr);
};
int string::IsSubstring(string& astring)
{
int ret=0;
assert(str!=NULL,astring.str!=NULL);
while((ret=str++-(astring.str)++)==0);
return ret;
};
int string::Str2Num()
{
int length=strlen(str)-1;
int num=0;
int index=0;
while(length>=0)
{
num+=(*(str+length--)-48)*pow(10,index++);
}
return num;
};
void string::UpperStr()
{
assert(str);
int length=strlen(str);
int index=0;
while(index<length)
{
if(islower(*(str+index)))
{
*(str+index)=toupper(*(str+index));
index++;
}
else
{
index++;
}
}
};
void string::ReplaceStr(char* str1,char* str2)
{
if(strlen(str1)==strlen(str2))
{
int length=strlen(str);
int length2=strlen(str2);
bool ismatch=0;
int index1=0;
int index2=0;
for(int i=0;i<length;i++)
{
if(*(str+i)==*str1)
{
ismatch=1;
for(int j=i;j<i+length2;j++)
{
if(*(str+j)!=*(str1+index1++))
{
ismatch=0;
}
}
if(ismatch==1)
{
for(int m=i;m<i+length2;m++)
{
*(str+m)=*(str2+index2++);
}
index1=0;
index2=0;
}
}
}
}
};
void string::ReplaceChar(char ch1,char ch2)
{
int length=strlen(str);
for(int i=0;i<length;i++)
{
if(*(str+i)==ch1)
{
*(str+i)=ch2;
}
}
};
void string::DelStr(char* string)
{
int length1=strlen(str);
int length2=strlen(string);
bool ismatch=0;
int index=0;
for(int i=0;i<length1;i++)
{
if(*(str+i)==*string)
{
ismatch=1;
for(int j=i;j<i+length2;j++)
{
if(*(str+j)!=*(string+index++))
{
ismatch=0;
}
}
if(ismatch==1)
{
for(int m=i;m<length1;m++)
{
*(str+m)=*(str+m+length2);
}
length1-=length2;
index=0;
}
}
}
};

void string::DelChar(char ch)
{
int length=strlen(str);
for(int i=0;i<length;i++)
{
if(*(str+i)==ch)
{
for(int j=i;j<length;j++)
{
*(str+j)=*(str+j+1);
}
length--;
}
}
};
string& string::operator=(string& astring)
{
char* text=new char[strlen(astring.str)+1];
strcpy(text,astring.str);
str=text;
return *this;
};
string& string::operator+(string& astring)
{
int length1=strlen(str);
int length2=strlen(astring.str);
char* text=new char[length1+length2];
for(int i=0;i<length1;i++)
{
*(text+i)=*(str+i);
}
int index=0;
for(int j=length1;j<length2;j++)
{
*(text+j)=*((astring.str)+index++);
}
str=text;
return *this;
};
char string::operator[](int index)
{
assert(str);
int length=strlen(str);
if(index<length)
{
return *(str+index-1);
}
};
ostream& operator<<(ostream& out,string& astring)
{
assert(astring.str);
out<<astring.str<<'\n';
return out;
}
//main
#include <iostream>
#include "string.h"
using namespace std;
int main()
{
String astring("fuck your mother");
astring.UpperStr();
cout<<astring<<endl;
String tstring(astring);
cout<<tstring<<endl;
cout<<astring.IsSubstring("FUCK YOUR MOTHER")<<endl;
String cstring("12345");
cout<<cstring.Str2Num()<<endl;
astring.ReplaceStr("YOUR","HERS");
cout<<astring<<endl;
astring.DelStr("HERS");
cout<<astring<<endl;
}
追问
谢谢大侠,运行报错误....assert函数未定义
追答
不会呀,我在我电脑运行是好的呀,把你邮箱给我发给你!
追问
我QQ365146105