题目:反转语句。
如I love Beijing! 反转后输出 !Beijing love I
特点是指反转单词的顺序,其他字符(这个可以自己指定)不反转。且不能用内置函数,如Split和Substring。
分析:我们需要保证一个单词的字母组成顺序不变,其他的字符(这个自己指定)直接反转即可。基本思想是整个语句在入栈的时候对每个字符做具体分析处理即可,然后出栈输出。
由于这道题的结构很简单,就省去使用栈的过程,我们直接从句末开始分析每个字符并处理输出。我用了一个list来存储特殊字符,这些字符直接反转即可,其他的字符要做单词的组成部分处理。如,可直接输出,B则作为Beijing的组成部分,要特殊处理。
代码(c#):
View Code
1 static void Main( string[] args) 2 { 3 List< char> chars = new List< char>(); 4 chars.Add( ' '); 5 chars.Add( ' . '); 6 chars.Add( ' ! '); 7 chars.Add( ' , '); 8 string str = " I love Shanghai, and I love Beijing! "; 9 Console.WriteLine(Reverse(str, chars)); 10 } 11 12 private static string Reverse( string str, List< char> chars) 13 { 14 string result = ""; 15 string word = ""; 16 char[] strArray = str.ToCharArray(); 17 for ( int i = strArray.Length - 1; i >= - 1; i--) 18 { 19 if (i == - 1) 20 { 21 result += word; 22 break; 23 } 24 25 if (chars.Contains(strArray[i])) 26 { 27 if (word != "") 28 { 29 result += word; 30 word = ""; 31 } 32 33 result += strArray[i]; 34 } 35 else 36 { 37 word = strArray[i] + word; 38 } 39 } 40 41 return result; 42 }
输出:
!Beijing love I and ,Shanghai love I