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类
导读:这两天没有做项目,然后就想着把之前在项目中用到过的东西总结总结.记得之前做今日开讲项目时,在比较学生学号的时候,我最开始用的是"==",但是,实践证明,这个玩意儿吧,总是很奇 ...
随机推荐
- C++多态性:虚函数的调用原理
多态性给我们带来了好处:多态使得我们可以通过基类的引用或指针来指明一个对象(包含其派生类的对象),当调用函数时可以自动判断调用的是哪个对象的函数. 一个函数说明为虚函数,表明在继承的类中重载这个函数时 ...
- HDU5950【矩阵快速幂】
主要还是i^4化成一个(i+1)^4没遇到过,还是很基础的一题矩阵快速幂: #include <bits/stdc++.h> using namespace std; typedef lo ...
- C 语言实例 - 字符串中各种字符计算
C 语言实例 - 字符串中各种字符计算 C 语言实例 C 语言实例 计算字符串中的元音.辅音.数字.空白符. 实例 #include <stdio.h> int main() { ]; i ...
- String的小笔记
String类的对象是不可变的! 在使用String类的时候要始终记着这个观念.一旦创建了String对象,它就不会改变. String类中也有可以改变String中字符串的方法,但只要是涉及改变的方 ...
- shell脚本解析json文件
安装jq扩展 下载:jq 根据自己系统下载对应的文件 cp jq-linux64 /usr/bin cd /usr/bin mv jq-linux64 jq chmod +x jq 使用方法 假设有个 ...
- Jquery测试纠错笔记
一. 解析: 获取元素范围大小顺序依次为: $(#one).siblings("div")>$("#one~div")>$("#one + ...
- Windows7获取、更换桌面背景,C#
使用的API原型是 BOOL SystemParametersinfo(UINT uiAction,UINT uiParam,PVOID pvParam,UINT fWinlni); 在C#中定义如下 ...
- 第十章 设计用户界面 之 构建UI布局
1. 概述 本章内容包括:实现可在不同区域重用的片段.使用Razor模板设计和实现页面.设计可视结构的布局.基于模板页开发. 2. 主要内容 2.1 实现可在不同区域重用的片段 最简单的重用方式就是在 ...
- CF1110C Meaningless Operations
思路: 令x为满足2x <= a的最大的x.如果a的二进制表示中包含0,则将b构造为(2x+1 - 1) ^ a即可:否则gcd(a ^ b, a & b) = gcd(2x+1 - 1 ...
- Vue实例的4个常用选项
1.过滤器 filters:在不改变的data的情况下输出前端页面需要的格式数据.例如将小数过滤为整数等.filters是一个对象,里边定义一个function方法,function传入一个参数,fu ...