问题描述:输入一个单词字符串,如:"Hello, Nice to see you",不使用现有类库的情况下,实现输出如:"you see to Nice ,Hello"
算法简单描述:首先把字符串全部反转,然后按以空格为划分依据,对空格前的每个部分反转,从而复原单词,合成字符串输出
代码:
/// <summary>
/// 单词反转
/// </summary>
/// <param name="array">待反转的字符串</param>
/// <returns>已反转的字符串</returns>
/// <author>Max Su</author>
public static string ReverseWords(string array)
{
int arrLen = array.Length;
char[] strNew = new char[arrLen + 1];
//全部反转
for (int index = 0; index < arrLen; index++)
{
strNew[index] = array[arrLen - 1 - index];
}
strNew[arrLen] = ' '; //为了复原最后一个单词,添加一个辅助空格
int iStart = 0, iEnd = 0;
char tmpChar;
//复原单词
for (int Index = 0; Index < arrLen + 1; Index++)
{
//Index指向空格
if (strNew[Index] == ' ')
{
iEnd = Index - 1;
while (iStart < iEnd)
{
tmpChar = strNew[iStart];
strNew[iStart] = strNew[iEnd];
strNew[iEnd] = tmpChar;
iStart++;
iEnd--;
}
iStart = Index + 1;//跳过空格
}
else if (strNew[Index] == '!' | strNew[Index] == ',' | strNew[Index] == '.' | strNew[Index] == ';')
{
iStart = Index + 1;//跳过标点
}
}
//合成字符串
array = string.Empty;
for (int index = 0; index < strNew.Length - 1; index++ )//去掉辅助的空格
{
array += strNew[index];
}
return array;
}