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