关于老赵微博得一道题的解法



给出一种解决方案如下:
internal class ConvertTool { static Random mRad = new Random(); const int ConvertMinLength = 4; private static char[] SplitChars = new[] { ' ', ',', '.', '!' }; /// <summary> /// 转换 /// </summary> /// <param name="textString"></param> /// <returns></returns> public static string ConverText(string textString) { int textLength = textString.Length; var firstSplitCharIndex = textString.IndexOfAny(SplitChars); if (firstSplitCharIndex < ConvertMinLength) { return textString; } StringBuilder stringBuilder = new StringBuilder(textString); int startRandomIndex = 1; const int randomStep = 2; var splitCharIndex = firstSplitCharIndex; while (splitCharIndex != -1 && splitCharIndex < textLength) { ConvertWordToRandom(stringBuilder, startRandomIndex, splitCharIndex - randomStep); startRandomIndex = splitCharIndex + randomStep; splitCharIndex = textString.IndexOfAny(SplitChars, splitCharIndex + 1); Console.WriteLine("splitCharIndex-{0},startRandomIndex-{1}", splitCharIndex, startRandomIndex); } return stringBuilder.ToString(); } /// <summary> /// 打乱某个单词 /// </summary> /// <param name="sb"></param> /// <param name="startIndex"></param> /// <param name="endIndex"></param> static void ConvertWordToRandom(StringBuilder sb, int startIndex, int endIndex) { if (startIndex >= endIndex) { return; } var sourceIndex = startIndex; var validateLength = endIndex - startIndex; while (validateLength > 1) { var targetIndex = mRad.Next(validateLength) + sourceIndex; SwitchToChar(sb, sourceIndex, targetIndex); sourceIndex++; validateLength = endIndex - sourceIndex; } } /// <summary> /// 替换指定两个位置的字符 /// </summary> /// <param name="sb"></param> /// <param name="sourceIndex"></param> /// <param name="targetIndex"></param> private static void SwitchToChar(StringBuilder sb, int sourceIndex, int targetIndex) { if (sourceIndex == targetIndex || sourceIndex < 0 || sourceIndex >= sb.Length || targetIndex < 0 || targetIndex >= sb.Length) { return; } char tempChar = sb[targetIndex]; sb[targetIndex] = sb[sourceIndex]; sb[sourceIndex] = tempChar; } }

  

posted on 2012-11-05 19:02  狩月  阅读(199)  评论(0)    收藏  举报

导航