using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using System.Threading;
namespace StringReverse
{
class Program
{
static void Main(string[] args)
{
string src = " i love this game. ";
StrUtil util=new StrUtil();
string result = util.ReverseByWord1(src);
Console.WriteLine(result);
AutoResetEvent ev = new AutoResetEvent(false);
ev.WaitOne();
}
}
public class StrUtil
{
public string ReverseByWord1(string src)
{
Monitor.Enter(this);
this.Check(src);
List<string> stackList = new List<string>();
bool word = false;//前一字符是单词
int start = 0;
int end = -1;
char[] charArr = src.ToCharArray();
for (int i = 0; i < charArr.Length; i++)
{
end++;
if (charArr[i] != ' ')
{
if (!word)
{
if (end > start)
{
stackList.Add(new string(charArr, start, end - start));
}
start = end;
}
word = true;
}
else //本次空格,上字符非空格
{
if (word)
{
if (end > start)
{
stackList.Add(new string(charArr, start, end - start));
}
start = end;
}
word = false;
}
}
stackList.Add(new string(charArr, start , charArr.Length - start));
StringBuilder resultsb = new StringBuilder();
for (int i = 0; i < stackList.Count; i++)
{
resultsb.Append(stackList[stackList.Count - 1 - i]);
}
Monitor.Exit(this);
return resultsb.ToString();
}
void Check(string src)
{
if (string.IsNullOrEmpty(src))
{
throw new ArgumentException("please input right string.");
}
}
}
}