題目:反轉語句。
如I love??? Beijing! 反轉后輸出 !Beijing??? love I
特點是指反轉單詞的順序,其他字符(這個可以自己指定)不反轉。且不能用內置函數,如Split和Substring。
?
分析:我們需要保證一個單詞的字母組成順序不變,其他的字符(這個自己指定)直接反轉即可。基本思想是整個語句在入棧的時候對每個字符做具體分析處理即可,然后出棧輸出。
由于這道題的結構很簡單,就省去使用棧的過程,我們直接從句末開始分析每個字符并處理輸出。我用了一個list來存儲特殊字符,這些字符直接反轉即可,其他的字符要做單詞的組成部分處理。如,可直接輸出,B則作為Beijing的組成部分,要特殊處理。
代碼(c#):


?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
?
????
?