小小c#算法题 3 字符串语句反转

题目:反转语句。

如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

    

原文地址:https://www.cnblogs.com/CSharpSPF/p/2433015.html