题目:反转语句。
如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 }
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