String类的实现,内部采用字符数组实现
#include <iostream>
using namespace std; class String{
public:
String(const char *str = NULL);//默认构造函数
String(const String &str);//复制构造函数
~String();//析构函数
String operator+(const String & str);//字符串连接
String & operator=(const String &str);//字符串赋值
bool operator==(const String &str);//判断是否字符串相等
int Length();//获取字符串长度
friend ostream & operator<<(ostream &o,const String &str);//重载输出
String SubStr(int start, int end);//求子字符串(start ... end-1)
private:
char * charArray;
}; String::String(const char *str)
{
if(str == NULL){
charArray=new char[];
charArray[]='\0';
}else{
charArray=new char[strlen(str)+];
strcpy(charArray,str);
}
}
String::String(const String &str)
{
charArray = new char[strlen(str.charArray)+];
strcpy(charArray,str.charArray);
}
String::~String()
{
delete [] charArray;
}
String String::operator+(const String &str)
{
String res;
delete [] res.charArray;//释放原有空间
res.charArray = new char[strlen(charArray)+strlen(str.charArray)+];
strcpy(res.charArray,charArray);
strcpy(res.charArray+strlen(charArray),str.charArray);
return res;
}
String & String::operator=(const String &str)
{
if(charArray == str.charArray)
return *this;
delete [] charArray;
charArray = new char[strlen(str.charArray)+];
strcpy(charArray,str.charArray);
return *this;
}
bool String::operator==(const String &str)
{
return strcmp(charArray,str.charArray) == ;
}
int String::Length()
{
return strlen(charArray);
}
ostream & operator<<(ostream &o, const String &str)
{
o<<str.charArray;
return o;
} String String::SubStr(int start, int end)
{
String res;
delete [] res.charArray;//释放原有内存
res.charArray = new char[end-start+];//重新申请内存
for(int i=; i+start<end; i++){
res.charArray[i]=charArray[start+i];
}
res.charArray[end-start] = '\0';
return res;
} void test()
{
String s = "abcd";
String t = "abcd";
cout<<s<<(s==t?" == ":" != ")<<t<<endl; String s2 = "Hello ";
String s3 = "China!";
cout<<s2+s3<<endl;
cout<<(s2+s3).SubStr(,s2.Length()+s3.Length())<<endl;
} int main()
{
test();
system("pause");
}
String类的实现,内部采用字符数组实现的更多相关文章
- Java中字符数组、String类、StringBuffer三者的相互转换
一.StringBuffer与String的相互转换 1.将StringBuffer转换成String StringBuffer类成员toString函数可将其转换成String类型. StringB ...
- java实验五——字符数组、String、StringBuffer的相互转化,StringBuffer的一些方法
package hello; import java.util.Scanner; public class 实验五 { public static void main(String[] args) { ...
- String类源码分析(JDK1.7)
以下学习根据JDK1.7String类源代码做注释 public final class String implements java.io.Serializable, Comparable<S ...
- 原生js的String类扩展
文章转自:http://www.cnblogs.com/zfc2201/archive/2012/12/16/2820335.html JS String类拓展方法: //获取字符数组 String. ...
- String类中常用的操作
一.获取: 1.获取字符串的长度(注意是方法,不是跟数组的属性一样的) int length(); 1 public static void getLength(){ 2 String s = &qu ...
- java面向对象中的String类中12种常用的方法
1.字符串与字符数组的转换 字符串可以使用toCharArray()方法变成一个字符数组,也可以使用String类的构造方法把一个字符数组变成一个字符串. public class StringAPI ...
- String类,StringBuffer类转字符数组
String不可变类型和StringBuffer可变类型 String类和StringBuffer类都是字符串表示类,区别在于String对象引用变量是不可变的,而StringBuffer类对象引用变 ...
- 字符数组和string判断是否为空行 NULL和0 namespace变量需要自己进行初始化
string 可以这样判断空行input !="" 字符数组可以通过判断第一个元素是否为空字符'\0',是的话为空行arrar[0]=='\0':或者用长度strlen(char ...
- 跟着刚哥梳理java知识点——深入理解String类(九)
一.String类 想要了解一个类,最好的办法就是看这个类的实现源代码,来看一下String类的源码: public final class String implements java.io.Ser ...
随机推荐
- 多主一从mysql replication同步表的大胆尝试.
能否将不同机器上的不同库中的表同步到同一个机器的同一个库中?表是不同的.而且对于slave这台机子来说,这些表只用来读. 同步不同库的表很简单了,用 replicate-do-table=db_n ...
- dot.js教程文档api
dot.js是一个短小精悍的js模板引擎,压缩版仅有4K大小,最近使用dot的时候整理出这个dot.js教程文档,其实称不上什么教程,只是对dot.js的介绍和实例,希望能帮助到一部分需要的人. 使用 ...
- _OBJC_CLASS_$_ errors 错误解决办法
步骤如下图: 1. 点击 Manage Schemes 2. Shared打对勾即可
- C语言程序设计(翁恺)--第二周课件中的两个遗留点
看完课件,发现其中有几个点是老师上课没点破的,或者是留到讨论区的,自己想了想答案,总结一下这些问题 第二周:计算 1.关于const的描述中提到:“如果试图对常量做修改,把它放在赋值运算符的左边,就会 ...
- linux里的bootproto的none,static,dhcp有什么区别
这个是网络配置参数:BOOTPROTO=static 静态IP BOOTPROTO=dhcp 动态IP BOOTPROTO=none 无(不指定)通常情况下是dhcp或者static,通过指定方式 ...
- shell基础——变量定义
快速参考: 变量定义格式: 变量名=值 str1="hello world" # define a string var str2=hello # define a string ...
- 怎查看linux系统的位数
# uname -a x86_64则说明你是64位内核, 跑的是64位的系统. i386, i686说明你是32位的内核, 跑的是32位的系统
- Windows SVN变更发送邮件通知(JAVA实现)
之前有过一篇python的实现http://blog.csdn.net/wiker_yong/article/details/10334967 1,新增文件post-commit.bat 内容: re ...
- ME525+ 刷机工具及设置中心号码
接上篇: 刷机包下载地址http://sbf.droid-developers.org/umts_jordanplus/list.php,选择一款大陆包.... 设置中心号码: 拨打 *#*#46 ...
- Python学习笔记8-类的继承 、深度优先、广度优先
Python 类声明 语法: class 类名: 类体 例: #--encoding:utf-8-- # class AddressBookEntity: myVersion=0.1 def __in ...