//
// main.cpp
// project
//
// Created by 徐伟 on 6/15/16.
// Copyright © 2016 fizz_i. All rights reserved.
//
#include<iostream>
#include<Cstring>
using namespace std;
class String
{
public:
String ();//默认构造函数
String(const char *s);
String(String &str);//构造函数
~String();
void display();
friend String operator +(String &s1,String &s2);
friend String operator -(String &s1,String &s2);
private:
char *p;//字符型指针用于指向字符串
int len;
};
String::String()
{
len=0;
p=NULL;
}
String::String(const char *s)
{
len=strlen(s);
p=new char [len+1];
strcpy(p,s);
}
String::String(String &str)
{
len=str.len;
if(p!=NULL)//赋值时原对象可能存在所以要删除,释放原有空间
delete []p;
p=new char [len+1];
strcpy(p,str.p);
}
String::~String()
{
if(!p)//当p内无储存的值时析构
delete []p;
}
void String::display()//输出指向的字符串
{
cout<<p<<endl;//不是应该输出的是*p??
//*p是指向字符串的指针,加上*p只会输出第一个字符不加会输出一串,就像打开一扇门,门后面的也就出来了。
}
String operator +(String &s1,String &s2)
{
String s;
s.len=s1.len+s2.len;
s.p=new char[s.len+1];
//注意重新定义容量用的是[]
strcpy(s.p,s1.p);
strcat(s.p,s2.p);//下有补充
return s;
}
/*
将两个char类型链接。
char d="GoldenGlobal";
char *s="View";
strcat(d,s);
结果放在d中
printf("%s",d);
输出 d 为 GoldenGlobalView (中间无空格)
d和s所指内存区域不可以重叠且d必须有足够的空间来容纳s的字符串。
返回指向d的指针。
*/
String operator -(String &s1,String &s2)
{
String s;
//c1是截去尾部空格的字符串
char *c1=new char [s1.len+1];
//格式:strlen (字符数组名)
//功能:计算给定字符串的(unsigned int型)长度,不包括'\0'在内
//说明:返回s的长度,不包括结束符NULL。
strcpy(c1,s1.p);
int i=s1.len-1;//为什么要-1;
while(i>=0&&c1[i]==' ')//这是删去第一个字符串后面多余的空格
--i;
c1[i+1]='\0';//c1结束
char *c2=new char [s2.len+1];//c2是去除前导空格的字符串
strcpy(c2,s2.p);
i=0;
while(i<s2.len&&c2[i]==' ')
++i;
int j=0;
while(i<s2.len&&c2[i]!='\0')//这步是删去c2前面的空格
{
c2[j]=c2[i];
++i;
++j;
}
c2[j]='\0';//c2结束
//将这两部分接起来
s.len=strlen(c1)+strlen(c2);
s.p=new char[s.len+1];
strcpy(s.p,c1);
strcat(s.p,c2);
delete c1;
delete c2;
return s;
}
int main()
{
String string1(" Hello "),string2(" World ");
string1.display();
string2.display();
String string3;
string3=string1+string2;
string3.display();
string3=string1-string2;
string3.display();
return 0;
}
string的构造
最新推荐文章于 2021-12-19 16:39:11 发布