CPP-基础:String类
已知类String的原型为:
class String
{
public:
String(const char *str = NULL); // 普通构造函数
String(const String &other); // 拷贝构造函数
~ String(void); // 析构函数
String& operator =(const String &other); // 赋值函数
String& operator +(const String &other); //重载运算符+
String& operator -(const String &other); //重载运算符-
bool operator==(const String &other); //重载"==",判断两个字符串相等
bool operator<(const String &other);
bool operator>(const String &other);
friend ostream& operator << (ostream &, const String &); //重载<<,这里必须使用friend,因为涉及到两个类之间私有成员的访问 private:
char *m_data; // 用于保存字符串
};
普通构造函数
String::String(const char *str)
{
if(NULL==str)
{
m_data = new char[]; // 得分点:对空字符串自动申请存放结束标志'\0'的//加分点:对m_data加NULL 判断
if(m_data!=NULL)
{
*m_data = '\0';
}
}
else
{
int length = strlen(str);
m_data = new char[length+]; // 若能加 NULL 判断则更好
if(m_data!=NULL)
{
strcpy(m_data, str);
}
} }
String的析构函数
String::~String(void)
{
delete [] m_data; // 或delete m_data;
}
拷贝构造函数
String::String(const String &other) // 得分点:输入参数为const型
{
int length = strlen(other.m_data);
m_data = new char[length+]; //加分点:对m_data加NULL 判断
if(m_data!=NULL)
{
strcpy(m_data, other.m_data);
}
}
赋值函数
String& String::operator=(const String &other) // 得分点:输入参数为const型
{
if(this == &other) //得分点:检查自赋值
return *this;
delete [] m_data; //得分点:释放原有的内存资源
int length = strlen( other.m_data );
m_data = new char[length+];
//加分点:对m_data加NULL 判断
if(m_data!=NULL)
strcpy( m_data, other.m_data );
return *this; //得分点:返回本对象的引用
}
运算符重载+
String& String::operator+(const String &other)
{
char temp[];
strcpy(temp,m_data); //先把左侧串存放到临时数组。
int length1 = strlen(this->m_data); //保存左侧串的长度;
delete [] m_data; //删掉左侧串内存。
int length2 = strlen(other.m_data);//计算右侧串的长度。
int length = length1 + length2;//计算左右串总长度。
m_data=new char[length+];//把总长度+1,准备接纳拼接后的字符串。
if(m_data!=NULL)
{
strcpy(m_data,temp);
}
strcat(m_data,other.m_data);
return *this;
}
运算符重载 -
String& String::operator-(const String &other)
{
char *temp,*p;
if( (temp=strstr(m_data,other.m_data)) ==NULL)
{
cout<<"没有符合的子串,不能使用'-'操作"<<endl;
return *this;
}
else
{
p=temp;
temp=temp+strlen(other.m_data);
*p='\0'; //把“o.World!”第一个字符变为'\0',从而让m_data缩减为前半部。
strcat(m_data,temp);
}
return *this;
}
重载运算符"<<"
ostream& operator<<(ostream &output, const String &other)
{
output<<other.m_data;
return output;
}
重载运算符"<"
bool String::operator<(const String &other)
{
if(strcmp(m_data,other.m_data)<)
return true;
return false;
}
重载运算符">"
bool String::operator>(const String &other)
{
if(strcmp(m_data,other.m_data)>)
return true;
return false;
}
运算符重载 ==
bool String::operator==(const String &other)
{
if(strcmp(m_data,other.m_data)==)
return true;
return false;
}
void main()
{
String s1("Hello,"); //普通构造函数
String s2("World!"); //普通构造函数
String s3(s2);//调用拷贝构造函数
String s4(s2);//调用拷贝构造函数
String s5("Hello,World"); //普通构造函数
String s6("Hello,World!");//普通构造函数 String s7("Hello,World!");//普通构造函数
String s8("o,W"); //普通构造函数
String s9; //自动调用普通构造函数 //String s3;//调用构造函数中的默认构造.
//s3=s2;// 调用重载后的赋值函数 cout<<s1<<endl; //输出对象s1.m_data;
cout<<s2<<endl; //输出对象s2.m_data;
cout<<s3<<endl; //输出对象s3.m_data; s3=s1+s2; //调用运算符=重载函数 cout<<s1<<endl;
cout<<s2<<endl;
cout<<s3<<endl; if(s4==s2)
cout<<"两个字符串相等"<<endl;
else
cout<<"两个字符串不相等"<<endl; if(s5<s6)
cout<<"s5小于s6"<<endl;
else if(s5>s6)
cout<<"s5大于s6"<<endl;
else
cout<<"s5等于s6"<<endl; s9=s7-s8;
cout<<s9<<endl;
system("pause");
}
CPP-基础:String类的更多相关文章
- Java基础String类
String是一个对象 String不属于8种基本数据类型(byte, char, short, int, float, long, double, boolean),String是对象,所以其默认值 ...
- Java基础—String类小结
一.String类是什么 public final class String implements java.io.Serializable, Comparable<String>, Ch ...
- Java基础---String类和基本数据类型包装类
第一讲 String类 一.概述 String是字符串的类类型,用于描述字符串事物.字符串是一个特殊的对象.特殊之处就在于: Stings= new String();和Str ...
- Java基础——String类(二)
今天做了几道String常见操作.先来几个代码实例: 例一:此方法,仅把字符串前后出现的空格去掉了,中间部分不会. class TestTrim { public static void main(S ...
- Java基础——String类(一)
一.String 类代表字符串 Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现. 字符串是常量:它们的值在创建之后不能更改.字符串缓冲区支持可变的字符串 ...
- 面向对象基础——String类
String类的两种实例化方法 A:直接赋值 public class StringDemo01{ public static void main(String args[]){ String na ...
- Java基础:String类详解,案例用户登录实现,案例手机号截取实现,案例敏感词替换实现;StringBuilder类详解,StringBuilder和String相互转换,附练习案例.
1.API 1.1 API概述-帮助文档的使用 什么是API API (Application Programming Interface) :应用程序编程接口 java中的API 指的就是 JDK ...
- [Java基础]——String类
此篇博客主要整理Java中的String类的使用. 一.String 1.1 String 的定义 上图是jdk中对String类的定义,得到的信息有: ①.String类声明为final的, ...
- Java基础——数组应用之字符串String类
字符串String的使用 Java字符串就是Unicode字符序列,例如串“Java”就是4个Unicode字符J,a,v,a组成的. Java中没有内置的字符串类型,而是在标准Java类库中提供了一 ...
- 【java 基础 9】原来我从没有了解过String类
导读:这两天没有做项目,然后就想着把之前在项目中用到过的东西总结总结.记得之前做今日开讲项目时,在比较学生学号的时候,我最开始用的是"==",但是,实践证明,这个玩意儿吧,总是很奇 ...
随机推荐
- 使用Spring Security控制会话
1.概述 在本文中,我们将说明Spring Security如何允许我们控制HTTP会话.此控件的范围从会话超时到启用并发会话和其他高级安全配置. 2.会话何时创建? 我们可以准确控制会话何时创建以及 ...
- now code寒假练习赛2——处女座的砝码(找规律题+高精度题)
#include <bits/stdc++.h> #define ll long long using namespace std; int main() { long double n ...
- PHP之操作数组
https://www.jb51.net/Special/623.htm https://www.php.net/manual/zh/ref.array.php https://www.runoob. ...
- 用spin和edit控件来用spin控制edit里面小数的增减
1.响应SPIN的消息,就是点SPIN的上键头和下键头的消息,在这个消息里改变值是以0.1步进量增减.2.使用UpdateData(FALSE)来更新EDIT的关联的double型的变量. 创建步骤 ...
- C#基础知识回顾
值类型和引用类型 值类型存在栈上,结构,枚举,数值类型 引用类型存在堆上,数组,类,接口,委托 把值类型存到引用类型中就是封箱,耗时 引用类型中的值类型是存在堆上,不是栈上,但是作为参数传递时,还是会 ...
- TFS 无法找到新加的Windows用户
Windows 用户加入后,无法在TFS中的"浏览"中找到(只有已经加入TFS的Windows用户显示出来) 其实这时候只要直接输入 用户名 然后点击"保存更改" ...
- 利用多项式实现图像几何校正(Matlab实现)
1.原理简述: 根据两幅图像中的一些已知对应点(控制点对),建立函数关系式,通过坐标变换,实现失真图像的几何校正. 设两幅图像坐标系统之间畸变关系能用解析式来描述: 根据上述的函数关系,可以依 ...
- 干货:排名前16的Java工具类
在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码. 一. ...
- mysql整理(个人)
注意:以下命令都是在Linux系统下执行的: 1.验证mysql是否安装成功: mysqladmin --version 2.连接mysql服务器: mysql -u root -p 之后输入密码 3 ...
- SpringBoot | 遇坑总结 | JPA
1. Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when ...