反转古诗

    class Program

    {

        static void Main(string[] args)

        {

            string input = "白日依山尽,黄河入海流。欲穷千里目,更上一层楼。";

            IStringInverter inverter1 = new StringInverter1();

            string str1 = inverter1.PiecewiseInvert(input);

            Console.WriteLine(str1);



            IStringInverter inverter2 = new StringInverter2();

            string str2 = inverter2.PiecewiseInvert(input);

            Console.WriteLine(str2);

            Console.Read();

        }



    }

    /// <summary>

    /// 根据标点符号反转

    /// </summary>

    class StringInverter1 : IStringInverter

    {

        #region IStringInverter 成员

        public string PiecewiseInvert(string input)

        {

            StringBuilder sb = new StringBuilder();

            int spindex = input.IndexOf('。');

            for (int i = 0; i < input.Length; i++)

            {

                if (spindex > -1)

                {

                    if (input[i] != '。')

                    {

                        sb.Append(input[spindex - i - 1]);

                    }

                    else

                    {

                        i -= (spindex + 1);

                        input = input.Remove(0, spindex + 1);

                        spindex = input.IndexOf('。');

                        sb.Append('。');

                    }

                }

                else

                {

                    sb.Append(input[input.Length - i - 1]);

                }//每句反转             

            }

            string[] two = sb.ToString().Split('。', ',');

            if (two.Length > 3)

                return two[1] + "," + two[0] + "。" + two[3] + "," + two[2] + "。";

            else

                throw new ArgumentException("此方法只能处理**,**。的语句");

        }



        #endregion

    }

    /// <summary>

    /// 利用正则,3种方法反转字符串

    /// </summary>

    class StringInverter2 : IStringInverter

    {

        #region IStringInverter 成员

        public string PiecewiseInvert(string input)

        {

            Regex punctuationReg = new Regex(@"[,。]");

            MatchCollection matchs = punctuationReg.Matches(input);

            StringBuilder sb = new StringBuilder();

            for (int i = 0; i < matchs.Count; i++)//匹配出有多少段

            {

                int index = input.IndexOf(matchs[i].Value);

                string section = input.Remove(index);

                input = input.Remove(0, index + 1);

                #region  遍历一半,利用临时变量

                var tempchars = section.ToCharArray();

                int templen = tempchars.Length;

                for (int c = 0; c < templen / 2; c++)

                {

                    char temp = tempchars[c];

                    tempchars[c] = tempchars[templen - c - 1];

                    tempchars[templen - c - 1] = temp;

                }

                section = string.Join("", tempchars);

                sb.Append(section);

                #endregion

                #region 遍历一遍

                //for (int c = 0; c < section.Length; c++)

                //{

                //    sb.Append(section[section.Length - c - 1]);//反转每句

                //}

                #endregion

                #region array的静态方法反转

                //var chars = section.ToCharArray();

                //Array.Reverse(chars);

                //section = string.Join("", chars);

                //sb.Append(section);

                #endregion

                sb.Append(matchs[i].Value);//加上标点

            }

            return sb.ToString();

        }

        #endregion

    }



    interface IStringInverter

    {

        string PiecewiseInvert(string input);

    }

  

你可能感兴趣的:(反转)