问题来自百度知道:
要求不要开辟另外的内存空间,我应该没做到。但至少效果实现了。
我的方法是:
static void Main(string[] args) { string sentence = "Recetly, hospitals in many"; Console.WriteLine(" 原来的句子:" + sentence); Console.WriteLine("处理后的句子:" + ReverseSentence(sentence)); Console.Read(); } static string ReverseSentence(string sentence) { char[] chars = sentence.ToCharArray(); sentence = ""; for (int i = chars.Length - 1; i >= 0; i--) { sentence += chars[i]; } //Console.WriteLine(sentence); Regex regex = new Regex(@"(\b\w+\b)|(\W+)"); MatchCollection matches = regex.Matches(sentence); //Console.WriteLine(matches.Count); string str = ""; for (int i = matches.Count - 1; i >= 0;i-- ) { str += matches[i].ToString(); } return str; }
运行结果:
那个逗号的位置不对,下面是修改后的:
static void Main(string[] args) { string sentence = "Recetly, hospitals in many"; Console.WriteLine(" 原来的句子:" + sentence); Console.WriteLine("处理后的句子:" + ReverseSentence(sentence)); Console.Read(); } static string ReverseSentence(string sentence)//反转句子 { sentence = ReverseString(sentence.Trim()); Regex regex = new Regex(@"(\b\w+\b)|(\W+)"); MatchCollection matches = regex.Matches(sentence); string str = ""; for (int i = matches.Count - 1; i >= 0; i--) { if(i%2 == 0) { str += matches[i].ToString(); } else { str += ReverseString(matches[i].ToString()); } } return str; } static string ReverseString(string str)//反转单个字符串 { char[] chars = str.ToCharArray(); str = ""; for (int i = chars.Length - 1; i >= 0; i--) { str += chars[i]; } return str; }
运行结果: