70分程序设计题,以下代码全部手写???真的无语
.Net类库里提供了string类及丰富的方法。请定义一个MyString类,包含一个私有的char[]数组用于存储数据,并为下列方法提供自己的实现,并不得使用类库中string类的已有方法。
public MyString(char[] value);[3分]
public char this[int index] {get; }[4分]
public int Length { get; }[1分]
public MyString Substring(int startIndex, int length); [5分]
public MyString ToLower();[3分]//char.ToLower()方法可将一个字符转为小写字符
class MyString
{
private char[] chs;
private int length;
public MyString() {
}
public MyString(char[] value)
{
length = value.Length;
chs = new char[length];
for (int i=0;i<length;i++)
{
chs[i] = value[i];
}
//chs = value;
}
public char this[int index]
{
get
{
if (index > length) throw new IndexOutOfRangeException();
return chs[index];
}
}
public int Length
{
get
{
return length;
}
}
public MyString Substring(int startIndex, int length)
{
char[] res = new char[length];
for (int i = startIndex; i < startIndex + length; i++)
{
res[i - startIndex] = chs[i];
}
return new MyString(res);
}
public MyString ToLower()//Char.ToLower()方法可将一个字符转为小写字符
{
//MyString ms = new MyString();
char[] res = new char[length];
for (int i = 0; i < length; i++)
{
res[i] = Char.ToLower(chs[i]);
}
return new MyString(res);
}
public override string ToString()
{
string s = "";
for(int i=0;i<length;i++)
{
s += chs[i];
}
return s;
}
}
写一个日期类Date,具有:
1)年、月、日属性,并保证不超出正常时间范围(日期从1月1日到12月31日,2月份天数可视为固定的28天)。[8分] 提示:生成一个数组以存储每月天数
2)无参构造函数和三参数构造函数。[4分]
3)写一个bool TryParse(String str, out Date t)方法,对格式类似“2020-06-20”的字符串进行解析。如果不超出正常日期范围,则输出该时间,返回true,否则返回false。[7分] 提示:string[] strs = str.Split(’-’)可将字符串分隔为几个子串,’-'为分隔符。
4)重载“-”(减号)运算符,使两个Date实例相减,返回int值,表示两时刻相差的天数。[4分]
5)重载ToString方法,将年月日信息显示出来。[2分]
class Date
{
private int year;
private int month;
private int day;
private static int[] days = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
public int Year
{
set
{
if (year < 0) throw new ArgumentException("输入年份无效");
else year = value;
}
get
{
return year;
}
}
public int Month
{
set
{
if (value > 0 && value <= 12)
month = value;
else throw new ArgumentException("输入月份无效");
// month = (value > 0 && value <= 12) ? value : 0;
}
get
{
return month;
}
}
public int Day
{
set
{
if (value > 0 && value <= days[month - 1])
day = value;
else throw new ArgumentException("输入日期无效");
}
get
{
return day;
}
}
public Date()
{
year = 0;
month = 0;
day = 0;
}
public Date(int y, int m, int d)
{
Console.WriteLine(y + " " + m + " " + d);
Year = y;
Month = m;
Day = d;
Console.WriteLine(year);
}
public bool TryParse(String str, out Date t)
{
string[] strs = str.Split('-');
int year = int.Parse(strs[0]);
int month = int.Parse(strs[1]);
int day = int.Parse(strs[2]);
t = new Date(year, month, day);
if (year < 0) return false;
if (month < 0 || month > 12) return false;
if (day < 0 || day > days[month - 1]) return false;
t.ToString();
return true;
}
public static int operator- (Date d1, Date d2)
{
int y_d1 = d1.Year;
int m_d1 = d1.Month;
int d_d1 = d1.Day;
int y_d2 = d2.Year;
int m_d2 = d2.Month;
int d_d2 = d2.Day;
int sum_m = 0;
for (int i = 0; i < m_d1-1; i++)
{
sum_m += days[i];
}
int totalDay_d1 = y_d1 * 365 + sum_m + d_d1;
sum_m = 0;
for (int i = 0; i < m_d2 -1 ; i++)
{
sum_m += days[i];
}
int totalDay_d2 = y_d2 * 365 + sum_m + d_d2;
return Math.Abs(totalDay_d2 - totalDay_d1);
}
public override string ToString()
{
return string.Format($"{year:D4}-{month:D2}-{day:D2}");
}
}