//解决本题思路:
//倒着+分次 放进栈
//原:a am I 要变成 I am a,是否可行?结果:I ma a
//可以发现单词也会受到影响,换个思路,倒着放进栈?
//原:a am I,结果:a am I
//发现单词不受影响了,但是顺序不对
//如果分开讨论,也就是每个单词进一次栈,下一个单词开始时候拿出来,然后加起来,是否可以解决?
//原:a am I
//注意:扫描方向是从右到左
//① I 放进栈,遇到空格,拿出来并加上空格 Str="I ""
//② ma放进栈,遇到空格,拿出来并加上空格,Str="I am
//③ a放进栈,没有空格,拿出来,Str = "I am a"
//可以发现常规的条件是:遇到空格,我们就把栈元素拿出来放到Str里
//到了字符串a时,后面没有空格,没法触发,也到了处理末尾了,怎么拿出来?
//我们在最后额外加一行,末尾时,把栈中的a再加到Str里
//解决
public string ReverseSentence(string str)
{
StringBuilder builder1=new StringBuilder(str.Length);
builder1.Append(str);
String output = word(builder1);
return output;
}
public String word(StringBuilder bui)
{
StringBuilder bui2=new StringBuilder("");
Stack ck = new Stack();
for(int i =bui.Length-1;i>=0;i--)
{
if(bui[i]==' ')
{
while(ck.Count!=0)
{
bui2.Append(ck.Pop()) ;
}
bui2.Append(bui[i]);
}
if(bui[i]!=' ')
{
ck.Push(bui[i]);
}
}
//因为最后没有空格,栈里还有内容没用完,把东西都放出来
while(ck.Count!=0){
bui2.Append(ck.Pop()) ;
}
//StringBuider转String
String str = bui2.ToString();
return str;
}