反转字符串

     最近在搞串口通信,读取出来的数据都是和仪表上显示相反。遂写了一下反转字符串的一些方法。其中异或运算来进行反转的效率最高。大家有更好的推荐,欢迎指出。

   /// <summary>
        /// 利用了字符串本身是数组的这一特性,然后倒序输出
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>

        static string MethodOne(string str)
        {
            if (string.IsNullOrEmpty(str))
            {
                return "";
            }
            StringBuilder sb = new StringBuilder();
            for (var i = str.Length - 1; i >= 0; i--)
            {
                sb.Append(str[i]);
            }
            return sb.ToString();
        }
        /// <summary>
        /// 第二个方法
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        static string MethodTwo(string str)
        {
            if (string.IsNullOrEmpty(str))
            {
                return "";
            }
            var charArr = str.ToCharArray();
            for (var i = 0; i < charArr.Length / 2; i++)
            {
                var temp = charArr[i];
                charArr[i] = charArr[charArr.Length - 1 - i];
                charArr[charArr.Length - 1 - i] = temp;
            }
            return new String(charArr);
        }


        /// <summary>
        /// 第三个方法(利用现有的实现)
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        static string MethodThree(string str)
        {
            if (string.IsNullOrEmpty(str))
            {
                return "";
            }
            return string.Join("", str.Reverse());
        }

        /// <summary>
        /// 第四种方法(利用栈)
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        static string MethodFour(string str)
        {
            if (string.IsNullOrEmpty(str))
            {
                return "";
            }
            Stack<char> strStack = new Stack<char>();
            for (var i = 0; i < str.Length; i++)
            {
                strStack.Push(str[i]);
            }
            //难道在写一个循环弹出来吗
            var arr = new Char[str.Length];
            for (var i = 0; i < arr.Length; i++)
            {
                arr[i] = strStack.Pop();
            }
            return new String(arr);
        }

        /// <summary>
        /// 方法五(利用异或)
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        static string MethodFive(string str)
        {
            if (string.IsNullOrEmpty(str))
            {
                return "";
            }
            var charArr = str.ToCharArray();
            for (var i = 0; i < charArr.Length / 2; i++)
            {
                charArr[i] ^= charArr[charArr.Length - 1 - i]; //a=a^b   用a来暂存。
                charArr[charArr.Length - 1 - i] ^= charArr[i];  //b=a     a^b^b=a
                charArr[i] ^= charArr[charArr.Length - 1 - i];   //a=b     a^a^b=b  
            }
            return new String(charArr);
        }

 

posted @ 2018-11-24 15:37  GDOUJKZZ  阅读(240)  评论(0编辑  收藏  举报