C#面向对象基础之String类的练习

练习一

  • 有⼀个GET⽹络请求中,⽹络连接(url字符串)通常是如下形式:
    http://msdn.microsoft.com/zh-CN/?query=string
    其中? 后⾯表示参数。上⾯的例⼦中,参数名为query的参数值为string
    (1).判断⼀个字符串是否是合法的url字符串(以http://或https://开头)
    (2).判断⽹络连接中是否包含参数(提示:通过是否有?判断)
    (3).封装⼀个⽅法,输⼊url字符串,返回其参数名和参数值
这道练习是要我们建立一个工具类,实现三个方法完成上面的功能
第一个要求中,我们可以通过String中的StratWith()方法轻松完成
第二个要求可以通过String类中的Contains()方法轻松完成
第三个要求可以通过String类的Substring()、IndexOf()、Split()这三个方法完成

具体用法自己去查msdn上提供的API

下面是代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace aHomeWork
{

    #region 
    /// <summary>
    /// URL工具类
    /// </summary>
    class URLTools
    {
        /// <summary>
        /// 判断URL是否合法
        /// </summary>
        /// <param name="URL">要判断的URL</param>
        /// <returns>合法返回真</returns>
        public bool LegalURL(string URL)
        {
            if (URL.StartsWith("http://") || URL.StartsWith("https://"))
            {
                return true;
            }

            return false;
        }

        /// <summary>
        /// 判断URL是否包含参数
        /// </summary>
        /// <param name="URL">要判断的URL</param>
        /// <returns>包含返回真</returns>
        public bool ContainsParams(string URL)
        {
            return URL.Contains("?");
        }

        /// <summary>
        /// 提取参数并返回
        /// </summary>
        /// <param name="URL"></param>
        /// <returns></returns>
        public string[] ExtractionParams(string URL)
        {
            if (!this.LegalURL(URL))
            {
                Console.WriteLine("输入的URL不合法!");
                return null;
            }
            else if (!this.ContainsParams(URL))
            {
                Console.WriteLine("输入的URL没有参数!");
                return null;
            }

            string paraUrl = URL.Substring(URL.IndexOf('?') + 1);

            string[] parameters = paraUrl.Split(new char[] { '&' });

            return parameters;
        }

    }


    #endregion
    class Program
    {
        static void Main(string[] args)
        {
        	//实例化工具
            URLTools tools = new URLTools();

            string testURL01 = "http://www.baidu.com?name=yuexiang&age=18";

            string testURL02 = "asdasd1231231";
            
			//调用工具中方法判断URL是否合法
            string testURL03 = "https://www.baidu.com";

            if (tools.LegalURL(testURL03))
            {
                Console.WriteLine($"合法的URL");
            }
            else
            {
                Console.WriteLine("输入的URL不合法!");
            }

			//定义数组接收返回的参数字符串
            string[] parameters = tools.ExtractionParams(testURL03);

            if (parameters != null)
            {
                int count = 1;
                foreach (var item in parameters)
                {
                    string[] str = item.Split(new char[] { '='});

                    Console.WriteLine($"第{count}个参数:参数名:{str[0]},参数值:{str[1]};");
                    count++;
                }
            }
        }
    }
}

练习二

  • 输⼊⼀个英⽂句⼦,翻转句⼦中单词的顺序,但单词内字符的顺序不变。
    句⼦中单词以空格符隔开。为简单操作,不要输⼊标点符号。
    例如输⼊“I am a student”,则输出“student a am I”。
这道题比上一道复杂些,不过也只需要了解一个String类的Concat()方法即可。

具体使用方式参见msdn提供的API

代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace bMathTool
{
    #region 
        /// <summary>
        /// 字符串工具类
        /// </summary>
        class StringTools
    {

        /// <summary>
        /// 反转字符串方法
        /// </summary>
        /// <param name="str">要反转的字符串</param>
        /// <returns>返回反转过的字符串</returns>
        public string ReverseStr(string str)
        {
            if (str != null)
            {
            	//定义数组保存分割后但还未反转的字符数组
                string[] beforeReverse = str.Split(new char[] { ' '});
				//定义字符串变量用来保存反转后拼接好的字符串,初值赋null
                string afterReverse = null;

				//以下for循环是反转拼接操作
                for (int i = beforeReverse.Length - 1; i >= 0; i--)
                {
                    if (i == beforeReverse.Length - 1)
                    {
                        afterReverse = string.Concat(afterReverse, beforeReverse[i]);
                    }
                    else
                    {
                        beforeReverse[i] = " " + beforeReverse[i].Trim();
                        afterReverse = string.Concat(afterReverse, beforeReverse[i]);
                    }
                }

                return afterReverse;
            }
            else
            {
                return str;
            }

        }
    }

    #endregion

    class Program
    {
        static void Main(string[] args)
        {
			//实例化工具
            StringTools tools = new StringTools();

            string testStr01 = "i am a student";

			//调用反转方法
            string afterReverse = tools.ReverseStr(testStr01);

            Console.WriteLine(afterReverse);
            
        }

    }
}

有疑问的可以私信博主。
点个关注,给个赞呗!

1. 声明两个变量:int n1 = 10, n2 = 20;要求将两个变量交换,最后输出n1为20,n2为10。扩展(*):不使用第三个变量如何交换? 2. 用方法来实现:将上题封装一个方法来做,方法有两个参数分别为num1,num2,将num1与num2交换。提示:方法有两个参数n1,n2,在方法中将n1与n2进行交换,使用ref。(*) 3. 请用户输入一个字符串,计算字符串中的字符个数,并输出。 4. 用方法来实现:计算两个数的最大值。思考:方法的参数?返回值?扩展(*):计算任意多个数间的最大值(提示:使用可变参数,params)。 5. 用方法来实现:计算1-100之间的所有整数的和。 6. 用方法来实现:计算1-100之间的所有奇数的和。 7. 用方法来实现:判断一个给定的整数是否为“质数”。 8. 用方法来实现:计算1-100之间的所有质数(素数)的和。 9. 用方法来实现:有一个整数数组:{ 1, 3, 5, 7, 90, 2, 4, 6, 8, 10 },找出其中最大值,并输出。不能调用数组的Max()方法。 10. 用方法来实现:有一个字符串数组:{ "马龙", "迈克尔乔丹", "雷吉米勒", "蒂姆邓肯", "科比布莱恩特" },请输出最长的字符串。 11. 用方法来实现:请计算出一个整型数组的平均值。{ 1, 3, 5, 7, 90, 2, 4, 6, 8, 10 }。要求:计算结果如果有小数,则显示小数点后两位(四舍五入)。Math.Round() 12. 请通过冒泡排序法对整数数组{ 1, 3, 5, 7, 90, 2, 4, 6, 8, 10 }实现升序排序。 13. 有如下字符串:【"患者:“大夫,我咳嗽得很重。” 大夫:“你多大年记?” 患者:“七十五岁。” 大夫:“二十岁咳嗽吗”患者:“不咳嗽。” 大夫:“四十岁时咳嗽吗?” 患者:“也不咳嗽。” 大夫:“那现在不咳嗽,还要等到什么时咳嗽?”"】。需求:①请统计出该字符中“咳嗽”二字的出现次数,以及每次“咳嗽”出现的索引位置。②扩展(*):统计出每个字符的出现次数。 14. 将字符串" hello world,你 好 世界 ! "两端空格去掉,并且将其中的所有其他空格都替换成一个空格,输出结果为:"hello world,你 好 世界 !"。 15. 制作一个控制台小程序。要求:用户可以在控制台录入每个学生的姓名,当用户输入quit(不区分大小写)时,程序停止接受用户的输入,并且显示出用户输入的学生的个数,以及每个学生的姓名。效果如图:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值