String类的改造

输入代码:

/*
*Copyright (c)2015,烟台大学计算机与控制工程学院
*All rights reserved.
*文件名称:sum123.cpp
*作    者:林海云
*完成日期:2015年4月29日
*版 本 号:v2.0
*
*问题描述: 请构造String类的加、减运算。其中,s1 + s2将两个字符串的连接起来;s1 - s2是将s1的尾部空格和s2的前导空格去除后的连接。
提示:有指针成员,设计时要注意。
*程序输入:无
*程序输出:连接后的字符串
*/
#include <iostream>
#include <Cstring>
using namespace std;
class String
{
public:
    String( );                         //默认构造函数
    String(const char *s);
    String(String &str);               //构造函数
    ~String();
    void display( );
    friend String operator + (String &s1,String &s2 );
    friend String operator - (String &s1,String &s2 );
private:
    char *p;//指向存储的字符串
    int len;//记录字符串的长度
};
String::String()
{
    len=0;
    p=NULL;
}
String::String(const char *s)
{
    len=strlen(s);
    p=new char[len+1];
    strcpy(p,s);
}
String::String(String &str)
{
    len=str.len;
    if(p!=NULL) delete []p;//释放初始指针原有的存储空间
    p=new char[len+1];
    strcpy(p,str.p);
}
String::~String()
{
    if(!p)  delete []p;
}
void String::display()
{
    cout<<p<<endl;
}
String operator + (String &s1,String &s2 )
{
    String s;
    s.len=s1.len+s2.len;
    s.p=new char[s.len+1];
    strcpy(s.p,s1.p);//复制字符串
    strcat(s.p,s2.p);//连接字符串
    return s;
}
String operator - (String &s1,String &s2 )
{
    int i,j;
    String s;
    char *c1=new char[s1.len+1];
    strcpy(c1,s1.p);
    i=s1.len-1;
    while(i>=0&&c1[i]==' ')  --i;//c1截去尾部空格
    c1[i+1]='\0';
    char *c2=new char[s2.len+1];
    strcpy(c2,s2.p);
    i=0;
    while(i<s2.len&&c2[i]==' ') ++i;//截去c2前端空格
    j=0;
    while(i<s2.len&&c2[i]!='\0')
    {
        c2[j]=c2[i];
        i++;
        j++;
    }
    c2[j]='\0';
    s.len=strlen(c1)+strlen(c2);
    s.p=new char[s.len+1];
    strcpy(s.p,c1);
    strcat(s.p,c2);
    delete c1;
    delete c2;
    return s;
}
int main()
{
    String string1(" Hello  "), string2(" World ");
    string1.display();
    string2.display();
    String string3;
    string3 = string1 + string2;
    string3.display();
    string3 = string1 - string2;
    string3.display();
    return 0;
}

运行结果:

时间: 2024-10-03 07:06:02

String类的改造的相关文章

java String 类 基础笔记

字符串是一个特殊的对象. 字符串一旦初始化就不可以被改变. String s = "abc";//存放于字符串常量池,产生1个对象 String s1=new String("abc");//堆内存中new创建了一个String对象,产生2个对象 String类中的equals比较字符串中的内容. 常用方法: 一:获取 1.获取字符串中字符的个数(长度):length();方法. 2.根据位置获取字符:charAt(int index); 3.根据字符获取在字符串中

String类实现

String类是应用框架中不可或缺的类 重载运算符实现字符串的操作 #idndef IOTECK_STRING_H_#define IOTECK_STRING_H_namespace iotek{ class String { public: String(const char*=NULL); ~String(); String(const String&); //拷贝构造函数 //String a; a=b; String& operator=(const String &);

String类

一.概述 Sting s1 = "abc";    //s1是一个类类型变量,"abc"是一个对象. String s2 = new String("abc"); //s1 . s2 的区别: 前者在内存中有一个对象,后者在内存中有两个对象. s1.equals(s2) 为true  因为 String复写了equals方法 二.常见的功能-获取和判断 获取: 1.int length(); 获取长度 2.char chatAt(int inde

C++实现String类

这是一道十分经典的面试题,可以短时间内考查学生对C++的掌握是否全面,答案要包括C++类的多数知识,保证编写的String类可以完成赋值.拷贝.定义变量等功能. #include<iostream> using namespace std; class String { public: String(const char *str=NULL); String(const String &other); ~String(void); String &operator =(cons

java中String类的构造函数

String类中的构造函数String(); 构造一个空字符串对象String(byte[] bytes); 通过byte数组构造字符串对象String(byte[] bytes,int offset,int length);通过byte数组,从offset开始,总共length长的字节构造字符串对象String(char[] value); 通过char数组构造字符串对象String(byte[] char,int offset,int length);通过char数组,从offset开始,总

Java (六、String类和StringBuffer)

Java String 类 字符串广泛应用 在Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串. 创建字符串 // ==比较的是字符串在栈中存放的首地址,而equals()比较的是两个字符串的内容是否相同 //普通的声明字符串的方法,只会在字符串常量池里开辟空间,并且开辟空间之前,会检查字符串常量池里是否已存在 //相同的数据,如果有,直接指向已存在的数据,如果没有会在字符串常量池里开辟一个新的空间 String s = "ccy"

JAVA API(一)String类和StringBuffer类

1.String类和StringBuffer类 在程序中经常会用到字符串,所谓的字符串就是指一连串的字符,它是由多个单个字符连接而成的.字符串中可以包含任意字符,这些字符必须包含在一对双引号""之内,如"abc".在Java中定义了String和StringBuffer类来封装字符串,并提供了一系列操作字符串的方法,它们都位于java.lang包中,因此不需要导包就可以直接使用.下面将对String类和StringBuffer类详细讲解. 1.1String类的初始

String类replaceAll方法正则替换深入分析

作者网址: https://my.oschina.net/shipley/blog/98973 背景:      前几天有人发了一个关于下面问题的贴,对这个有点好奇,故花时间做了点研究.        对单个反斜杠字符串替换成双斜杠的Java实现如下:    String s = "\\";    方法一:String sr1 = s.replaceAll("\\\\", "\\\\\\\\");    方法二:String sr1 = s.re

java11-3 String类的获取功能

package cn_String2;/* String类的获取功能 int length():获取字符串的长度. char charAt(int index):获取指定索引位置的字符 int indexOf(int ch):返回指定字符在此字符串中第一次出现处的索引. 为什么这里是int类型,而不是char类型? 原因是:'a'和97其实都可以代表'a' int indexOf(String str):返回指定字符串在此字符串中第一次出现处的索引. int indexOf(int ch,int