字符串类(II)

原创 2018年04月15日 15:42:50

Description
封装一个字符串类,用于存储字符串和处理的相关功能,支持以下操作:

  1. STR::STR()构造方法:创建一个空的字符串对象。

  2. STR::STR(const char *)构造方法:创建一个字符串对象,串的内容由参数给出。

  3. STR::length()方法:返回字符串的长度。

  4. STR::putline()方法:输出串的内容,并换行。

  5. 运算符“+”和“+=”,表示两个字符串的连接运算,规则为:

    c = a + b 表示串c中的字符是a和b的连接:“a+b”的结果是一个新的字符串,串a和串b的内容不变。

    a += b 表示串a中的字符是a和b的连接:串b中的内容不变


你设计一个字符串类STR,使得main()函数能够正确运行。

函数调用格式见append.cc。

append.cc中已给出main()函数。


Invalid Word(禁用单词)错误:“string”、“vector”等被禁用。

Input
输入有若干行,每行一个字符串。

Output
每组测试数据对应输出一行,包含两部分内容,首先是一个整数,表示输入串的长度,然后是输入的字符串,两者用一个空格分开。格式见sample。

Sample Input
A
123456789
Sample Output
12 Hello World!
0
12 Hello World!
12 Hello World!
12 Hello World!
10 A123456789
1 A
9 123456789
10 123456789A
1 A
HINT
Append Code
append.cc,


int main()
{
    STR e;
    STR h("Hello World!");
    STR he = e + h;
    cout << he.length() << " ";
    he.putline();
    cout << e.length() << " ";
    e.putline();
    cout << h.length() << " ";
    h.putline();
    e += h;
    cout << e.length() << " ";
    e.putline();
    cout << h.length() << " ";
    h.putline();

    char s1[100001], s2[100001];
    while(gets(s1) != NULL && gets(s2) != NULL)
    {
        STR str1(s1), str2(s2);
        STR str = str1 + str2;
        cout << str.length() << " ";
        str.putline();
        cout << str1.length() << " ";
        str1.putline();
        cout << str2.length() << " ";
        str2.putline();
        str2 += str1;
        cout << str2.length() << " ";
        str2.putline();
        cout << str1.length() << " ";
        str1.putline();
    }
}

AC代码

#include <iostream>
#include <cmath>
#include <stdio.h>
using namespace std;
class STR
{
private:
    char *_a;
    int _i;
public:
    STR():_a(NULL),_i(0){}
    STR(char *a):_a(a)
    {
        int i=0;//这里不能用strlen,因为禁用string所以头文件#include<cstring>也禁用了;
        while(_a[i]!='\0')
            i++;
        _i=i;
    }
    int length(){return _i;}
    void putline()
    {
        if(_i==0)
            cout<<endl;
        else
            cout<<_a<<endl;
    }
    STR operator+(const STR& p)
    {
        STR c;
        c._a=new char[_i+p._i+1];//动态区域的类型与等号左边的类型相同即可;
        for(int j=0;j<_i;j++)
        {
            c._a[j]=_a[j];
        }
        for(int i=_i;i<_i+p._i;i++)
        {
            c._a[i]=p._a[i-_i];
        }
        c._a[_i+p._i]='\0';
        c._i=_i+p._i;
        return c;
    }
    STR operator+=(const STR& p)
    {
        return *this=*this+p;
    }
};

int main()
{
    STR e;
    STR h("Hello World!");
    STR he = e + h;
    cout << he.length() << " ";
    he.putline();
    cout << e.length() << " ";
    e.putline();
    cout << h.length() << " ";
    h.putline();
    e += h;
    cout << e.length() << " ";
    e.putline();
    cout << h.length() << " ";
    h.putline();

    char s1[100001], s2[100001];
    while(gets(s1) != NULL && gets(s2) != NULL)
    {
        STR str1(s1), str2(s2);
        STR str = str1 + str2;
        cout << str.length() << " ";
        str.putline();
        cout << str1.length() << " ";
        str1.putline();
        cout << str2.length() << " ";
        str2.putline();
        str2 += str1;
        cout << str2.length() << " ";
        str2.putline();
        cout << str1.length() << " ";
        str1.putline();
    }
}

1、重载运算符的时候,同一个类之间的运算符不用加friend,不同类的可能要加friend。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fighting123678/article/details/79949832

汇编语言程序设计II

-
  • 1970年01月01日 08:00

Problem B: 字符串类(II)

Problem B: 字符串类(II) Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 3652  Solved: 1577 [Submit][S...
  • usher_ou
  • usher_ou
  • 2017-04-12 16:47:54
  • 1605

Problem G: 字符串类(II)

字符串类,嗯。禁用string头文件,嗯。没啥好说的。 Description 封装一个字符串类,用于存储字符串和处理的相关功能,支持以下操作: 1. STR::STR()构造方法:...
  • abc_ambition
  • abc_ambition
  • 2017-04-12 22:25:45
  • 106

2.2 字符类 (2)

注意:正则表达式中的元字符在字符类中不做任何特殊处理,它仅仅表示一个自身的字符。如正则表达式[-.]只能匹配字符“-”和“.”,它不能匹配除字符“-”和“.”之外的字符。因此,在字符类中使用元字符时,...
  • wlzhengzebiaodashi
  • wlzhengzebiaodashi
  • 2008-03-24 15:11:00
  • 1859

HDU_1002 A + B Problem II

A + B Problem II Problem Description I have a very simple problem for you. Given two integers A an...
  • yuniZZ
  • yuniZZ
  • 2014-07-30 10:46:09
  • 177

C++课程设计之string字符串类

  • 2013年07月05日 21:41
  • 145KB
  • 下载

自己写一个字符串类

#include #include using namespace std; class Mystring { private:  char *m_buf; public:  Myst...
  • tc1hen
  • tc1hen
  • 2012-08-21 18:53:46
  • 1178

字符串类String的设计

#include using namespace std;class String { public: String(); String(const char *str=0); ...
  • hz5034
  • hz5034
  • 2015-09-14 17:31:48
  • 933

字符串类string的基本实现

包含指针成员的类深赋值运算符重载,类设计,类的默认、拷贝构造函数,析构函数 实验参考 class String {  char * m_data; public: ...
  • qingzai_
  • qingzai_
  • 2015-09-02 16:36:46
  • 952

自定义c++字符串类

  • 2017年09月10日 15:15
  • 4.87MB
  • 下载
收藏助手
不良信息举报
您举报文章:字符串类(II)
举报原因:
原因补充:

(最多只允许输入30个字)