字符串类(II)

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

A123456789

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


#include<bits/stdc++.h>
using namespace std;
void f(char *s1,char *s2,int length)//令s1=s2,length为s2的长度
{
    int i;
    for( i=0;i<length;i++)
        {
            s1[i]=s2[i];
        }
        s1[i]=0;
}
class STR
{
public:
    STR()
    {
       l=0;
    }
    STR(char *p)
    {
        int i;
        for(i=0;p[i]!=0;i++)
        {
        }l=i;
        s=new char[l+1];
        f(s,p,l);
    }
    ~STR()
    {
       delete []s;
    }
    int length()
    {
        return l;
    }
    void putline()
    {
        cout<<s;
        cout<<endl;
    }
    STR &operator+=(STR &p)//加&是因为没有写构造函数,成员有指针。
    {
        //思路是先构造一个q存左操作数,左操作数new完后,再将q和p复制过去。
        int j=l;
        STR q(s);
        l=l+p.l;
        delete []s;
        s=new char[l+1];
        f(s,q.s,q.l);
        for(int i=0;i<p.l;i++)
        {
            s[j++]=p.s[i];
        }
        s[l]=0;
        return *this;

    }
    friend STR operator+(STR &e,STR &h);

private:
    int l;
    char *s;
};
   STR operator+(STR &e,STR &h)
{
    STR temp;
    int j=e.l;
    temp.l=e.l+h.l;
    temp.s=new char[temp.l+1];
    for(int i=0;i<e.l;i++)
    {
        temp.s[i]=e.s[i];
    }
    for(int i=0;h.s[i]!=0;i++)
    {
        temp.s[j++]=h.s[i];
    }
    temp.s[temp.l]=0;
    return temp;
}
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();
    }
}

猜你喜欢

转载自blog.csdn.net/iwanttoupupup/article/details/80036498
今日推荐