zoukankan      html  css  js  c++  java
  • 反转字符串

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

       /// <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);
            }
  • 相关阅读:
    前端模块的前生今世
    variable fonts
    node
    webpack tree shaking
    es6 proxy浅析
    如何实现优美的骨架屏
    阿里巴巴Java开发手册建议创建HashMap时设置初始化容量,但是多少合适呢?
    新来个技术总监,禁止我们使用Lombok!
    2020年Java程序员应该学习的10大技术
    为啥HashMap的默认容量是16?
  • 原文地址:https://www.cnblogs.com/gdouzz/p/10012301.html
Copyright © 2011-2022 走看看