程序设计题

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}");
        }

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值