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类
导读:这两天没有做项目,然后就想着把之前在项目中用到过的东西总结总结.记得之前做今日开讲项目时,在比较学生学号的时候,我最开始用的是"==",但是,实践证明,这个玩意儿吧,总是很奇 ...
随机推荐
- LeetCode: 520 Detect Capital(easy)
题目: Given a word, you need to judge whether the usage of capitals in it is right or not. We define t ...
- MFC中Radio Button使用方法
先为对话框加上2个radio button,分别是Radio1和Radio2. 问题1:如何让Radio1或者Radio2默认选上?如何知道哪个被选上了? 关键是选上,“默认”只要放在OnInitDi ...
- vijosP1286座位安排(状压DP)
传送门 题意 计算\(C_{n*m}^k/可行方案数\) 分析 定义dp[i][j][k]为第i行用过人数为j个且第i行状态为k的方案数 转移方程:dp[i][j][k]=Σdp[i-1][j-num ...
- lightoj1001【简单题】
题意: 一个人的值不能超过10: #include<stdio.h> #include<queue> #include<string.h> #include< ...
- IT兄弟连 JavaWeb教程 Servlet会话跟踪 Session技术
Servlet提供了HttpSession接口,该接口提供了一种跨多个页面请求或访问网站时识别用户以及存储有关用户信息的方式. Servlet容器使用这个接口来创建一个HTTP客户端和HTTP服务器之 ...
- C#:索引
1. 什么是索引 索引是一组get和set访问器,类似于属性的访问器. 2. 索引和属性 和属性一样,索引不用分配内存来存储 索引和属性都主要被用来访问其他数据成员,这些成员和它们关联,它们为这些成员 ...
- 《ERP真的免费不花钱·企业自主实施OdooERP》试读:第十章-仓库条码操作案例
文/开源智造联合创始人老杨 本文来自<企业自主实施OdooERP>的试读章节.书籍尚未出版,请勿转载.欢迎您反馈阅读意见. 案例背景 各位读者同学,本案例假定读者已经完成了进销存案例练习. ...
- STC单片机掉电断电失电瞬间EEPROM数据保存处理办法(转)
由于客户在请人设计开发一设备,但是设备用户处总停电,造成设备及其周边耗材损耗严重,因此请我司在现有STC为主要芯片的基础上做掉电瞬间EEPROM里的20个参数保存,上电后通过读取EEPROM中的参数回 ...
- luoguP3796[模板]AC自动机(加强版)
传送门 ac自动机模板,可能我写的ac自动机是有点问题的,所以跑的有些慢 暴力跳fail统计 代码: #include<cstdio> #include<iostream> # ...
- 如何利用python制作微信好友头像照片墙?
这个不难,主要用到itchat和pillow这2个库,其中itchat用于获取微信好友头像照片,pillow用于拼接头像生成一个照片墙,下面我简单介绍一下实现过程,代码量不多,也很好理解,实验环境wi ...