Skip to content

1462: 小V的字符串类

题目

题目描述

小V刚刚学会了面向对象编程

于是他想让大家帮忙写个mystring 你需要完成以下内容:(注意这里的i都为0-base) - 构造一个长度为len以某个字符初始化的mystring。

  • 从string中构造一个mystring。(请注意,mystring中char数组长度应和传入的string长度保持一致。可调用c.length()获得传入字符串的长度)。

  • 用下标输出mystring变量中的第x位(若x超过字符串长度输出空格).

  • 重载运算符<, 比较两个mystring类型字符串的大小.(比较方式:先比较每一位上字符,再比较长度。例:aaaa<b)

  • 写一个ADD函数,将一个mystring类型字符串接到另一个之后。

  • 写一个out函数(你也可以重载输出运算符)输出mystring类型字符串。(使用重载运算符即是采用主程序注释中的输出方式,主程序仅允许此种情况的修改。)

  • 写一个get_len函数,输出mystring类型中储存的字符串长度。

  • 为防止内存泄漏,写一个析构函数。同时也请注意其他位置可能的内存泄漏。此项将通过检查代码进行,若未完成,此题得分砍半

要求如下:

  • 不得修改超出要求允许的部分。
  • 如未按要求完成,对应测试点不得分。
  • 请严格按照以上要求完成此题。我们会检查你提交的代码。虽然有其他的实现方式,但如果你未按照要求写代码,我们不会给你分数。

输入格式

第一行一个id表示操作号。 其余输入具体见给定代码的主程序部分。

输出格式

输出方式详见主程序。 你的out函数中不需要进行换行。

样例输入

0

aabbcc abcdef

3

0

3

5

样例输出

a

d

f

6 6

1

aabbccabcdef

12

数据范围

保证所有字符串长度$1 \leq len \leq 200$

每个测试点20分,如果对应操作未按要求完成,哪怕通过对应测试点,对应测试点也不得分。 (助教将人工检查)

sample.cpp如下

#include <string>
#include <cstring>
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;

class mystring
{
private:
    char *ch = nullptr;
    int len = 0;

public:

    mystring()
    {
        // TODO
    }
    mystring(int _len, int c)
    {
        // TODO
    }
    mystring(string &c)
    {
        // TODO
    }
    ~mystring()
    {
        // TODO
    }

    // TODO
};

string str_in1, str_in2;
int n, id;
int main()
{
    cin >> id;
    if (id == 1)
    {
        mystring str1(100,'a');
        str1.out(); puts("");
        // cout << str1 << endl;
    }
    else if (id == 2)
    {
        cin >> str_in1;
        mystring str2 = str_in1;
        cin >> n;
        for (int i = 0, x; i < n; ++ i)
        {
            cin >> x;
            cout << str2[x] << endl;
        }
    }
    else if (id == 3)
    {
        cin >> str_in1 >> str_in2;
        mystring str2 = str_in1;
        mystring str3 = str_in2;
        cout << (int)(str2 < str3) << endl;
    }
    else if (id == 4)
    {
        cin >> str_in1 >> str_in2;
        mystring str2 = str_in1;
        mystring str3 = str_in2;
        str2.ADD(str3);
        str2.out(); puts("");
        // cout << str2 << endl;
    }
    else
    {
        cin >> str_in1 >> str_in2;
        mystring str2 = str_in1;
        mystring str3 = str_in2;
        cin >> n;
        for (int i = 0, x; i < n; ++ i)
        {
            cin >> x;
            cout << str3[x] << endl;
        }
        cout << str2.get_len() << " " << str3.get_len() << endl;
        cout << (int)(str2 < str3) << endl;
        str2.ADD(str3);
        str2.out(); puts("");
        // cout << str2 << endl;
        cout << str2.get_len() << endl;
    }
    return 0;
}

Oops! 本题目还没有解答!

助教老师们编题的速度,已经超过了解题的速度!

OJ翻了一新,但本解答集还大多用的是2017-2019级,甚至更早的同学们贡献的答案。

如果你已经AC了,可以的话,请您参考添加页面,与大家一起分享你的题解!