反转字符串
最近在搞串口通信,读取出来的数据都是和仪表上显示相反。遂写了一下反转字符串的一些方法。其中异或运算来进行反转的效率最高。大家有更好的推荐,欢迎指出。
/// <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); }
终极目标:世界大同