Skip to content

14297: 【原4297】小可怜的字符串

题目

题目描述

author: 小可怜 原OJ链接:https://acm.sjtu.edu.cn/OnlineJudge-old/problem/4297

小可怜的字符串

Description

助教是个小可怜,因为她不知道要出什么机考题了。 然后她发现,大家终于可以面向对象变成了。 啊!面向对象! 于是她想让大家写个mystring~ 你需要完成以下内容:(注意这里的i都为0-base) - 构造一个长度为len以某个字符初始化的mystring。

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

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

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

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

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

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

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

要求如下:

  • 不得修改超出要求允许的部分。
  • 如未按要求完成,对应测试点不得分。
  • 请严格按照以上要求完成此题。我们会检查你提交的代码。虽然有其他的实现方式,但如果你未按照要求写代码,我们不会给你分数。
  • 同时,此题需要你注意提交代码的代码风格!!!极为糟糕的代码风格(例如改变语法的某些宏定义)会酌情扣分!!!

Input Format

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

Output Format

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

SAMPLE INPUT

0
aabbcc abcdef
3
0
3
5

SAMPLE OUTPUT

a
d
f
6 6
1
aabbccabcdef

DATA LIMIT

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

Hint

测试点编号 | id|
-|-| 1 | 1 | 2 | 2 | 3 | 3 | 4 | 4 | 5 | 0 |

每个测试点20分,如果对应操作未按要求完成,哪怕通过对应测试点,对应测试点也不得分。 (比如重载<的操作未按要求完成,3、5测试点不得分。) (同样,如果检查代码发现未按要求处理内存泄漏,得分砍半指若你在此题得分80,最后只计得分40.)

本题只有一次提交机会!!!

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了,可以的话,请您参考添加页面,与大家一起分享你的题解!