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类
导读:这两天没有做项目,然后就想着把之前在项目中用到过的东西总结总结.记得之前做今日开讲项目时,在比较学生学号的时候,我最开始用的是"==",但是,实践证明,这个玩意儿吧,总是很奇 ...
随机推荐
- 详细分享UICollectionView的自定义布局(瀑布流, 线性, 圆形...)
前言: 本篇文章不是分享collectionView的详细使用教程, 而是属于比较'高级'的collectionView使用技巧, 阅读之前, 我想你已经很熟悉collectionView的基本使用, ...
- HDU1059 【DP·二进制数优化】
题意: 有6种不同价值的物品,然后问你能不能分成两半使得两堆价值相等: 思路: 一共有20000*6=120000 多的价值, 总共背包有20000个,价值最大是120000,看看能不能DP到valu ...
- Codevs 3409 搬运礼物
3409 搬运礼物 CodeVS原创 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 青铜 Bronze 题解 题目描述 Description 小浣熊松松特别喜欢交 ...
- [Xcode 实际操作]九、实用进阶-(5)使用正则表达式判断格式是否正确
目录:[Swift]Xcode实际操作 本文将演示使用正则表达式判断邮箱的格式是否正确. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit ...
- 【OpenJ_Bailian - 1328】Radar Installation (贪心)
Radar Installation 原文是English,直接上中文 Descriptions: 假定海岸线是无限长的直线.陆地位于海岸线的一侧,海洋位于另一侧.每个小岛是位于海洋中的一个点.对于任 ...
- 始终要覆盖toString
始终要覆盖toString 虽然java.lang.Object提供了toString方法的一个实现,但它返回的字符串通常并不是类的用户所期望看到的.它包含类的名称,以及一个"@&quo ...
- webpack 中导入 vue 和普通网页使用 vue 的区别(四)
一:在普通网页中使用 vue 使用 script 标签,引入 vue 包 在 ndex 页面中,创建一个 id 为 App 的 div 容器 通过 new Vue 得到一个 vue 实例 二:在 we ...
- Execution failed for task ':app:installDebug'.
解决方案:重新起服务(react-native start),重新起项目(react-native run-android)
- dom4j的下载 在线文档 创建用户库
- XML标准和RFC官方文档