不用任何库函数实现以单词为单位的字符串逆转算法(C#)
2009-05-16 14:14
519 查看
算法思想:
(1)从字符串最后一个字符开始向前查找,遇到第一个空白字符结束查找,用变量curPos记录当前位置,查找过程中用变量wordLength记录单词长度,以curPos和wordLength为依据保存单词到字符数组result中。
(2)以curPos为依据向前查找空白,遇到第一个非空白字符结束查找,用变量curPos记录当前位置,查找过程中用变量spaceLength记录单词长度,以curPos和spaceLength为依据保存单词到字符数组result中。
(3)判断curPos值,如果大于等于0,重复(1)(2)两步。放到do..while循环中
(1)(2)两步可以颠倒。因为字符串最后可能是空白"I am a student "也可能是非空白" I am a student"
输入字符串:"I am a student"结果" student a am I".可以测试字符串的其他结构。如空白字符串,一个单词,开始为空白,最后为空白,单词间任意个空白。结果都正确。具体代码如下:
-----------------------------------------------------------------------------------------------------------------------------------
static void Main(string[] args)
{
string str = "";
Program.ReverseStringByWordUnit(str);
}
static void ReverseStringByWordUnit(string orgString)
{
int totalLength = orgString.Length;
if (0 >= totalLength)
{
Console.WriteLine("字符串为空,请输入一个长度大于0的字符串!");
return;
}
char[] result = new char[totalLength];//保存结果的字符数组
int wordLength = 0;//单词长度
int spaceLength = 0;//空白长度
int index = 0;//记录保存结果到result字符数组的下标
int curPos = totalLength - 1;//记录开始索引字符串的位置,初始为字符串最后一个字符。
do
{
int i;
//从字符串最后一个位置开始向前查找,遇到第一个空白,结束查找。
for (i = curPos; i >= 0; )
{
if (orgString[i] != ' ' && orgString[i] != '/t')
{
i--;
wordLength++;
continue;
}
else
break;
}
//保存当前索引位置,作为输出单词的起始位置依据以及查找空白的开始位置依据
curPos = i;
//从单词的开始位置保存该单词的每个字母到result字符数组里
for (int j = curPos + 1; j <= curPos + wordLength; j++)
{
result[index] = orgString[j];
index++;
}
//查找两个单词间的空白
for (i = curPos; i >= 0; )
{
if (orgString[i] == ' ' || orgString[i] == '/t')
{
i--;
spaceLength++;
continue;
}
else
break;
}
//保存当前索引位置,作为输出空白的起始位置依据以及查找下一个单词的开始位置依据
curPos = i;
//保存空白字符到字符数组里
for (int j = curPos + 1; j <= curPos + spaceLength; j++)
{
result[index] = orgString[j];
index++;
}
//置单词长度变量和空白长度变量为0
wordLength = 0;
spaceLength = 0;
} while (curPos >= 0);
//输出结果
for (int i = 0; i < totalLength; i++)
Console.Write("{0}", result[i]);
Console.WriteLine();
}
(1)从字符串最后一个字符开始向前查找,遇到第一个空白字符结束查找,用变量curPos记录当前位置,查找过程中用变量wordLength记录单词长度,以curPos和wordLength为依据保存单词到字符数组result中。
(2)以curPos为依据向前查找空白,遇到第一个非空白字符结束查找,用变量curPos记录当前位置,查找过程中用变量spaceLength记录单词长度,以curPos和spaceLength为依据保存单词到字符数组result中。
(3)判断curPos值,如果大于等于0,重复(1)(2)两步。放到do..while循环中
(1)(2)两步可以颠倒。因为字符串最后可能是空白"I am a student "也可能是非空白" I am a student"
输入字符串:"I am a student"结果" student a am I".可以测试字符串的其他结构。如空白字符串,一个单词,开始为空白,最后为空白,单词间任意个空白。结果都正确。具体代码如下:
-----------------------------------------------------------------------------------------------------------------------------------
static void Main(string[] args)
{
string str = "";
Program.ReverseStringByWordUnit(str);
}
static void ReverseStringByWordUnit(string orgString)
{
int totalLength = orgString.Length;
if (0 >= totalLength)
{
Console.WriteLine("字符串为空,请输入一个长度大于0的字符串!");
return;
}
char[] result = new char[totalLength];//保存结果的字符数组
int wordLength = 0;//单词长度
int spaceLength = 0;//空白长度
int index = 0;//记录保存结果到result字符数组的下标
int curPos = totalLength - 1;//记录开始索引字符串的位置,初始为字符串最后一个字符。
do
{
int i;
//从字符串最后一个位置开始向前查找,遇到第一个空白,结束查找。
for (i = curPos; i >= 0; )
{
if (orgString[i] != ' ' && orgString[i] != '/t')
{
i--;
wordLength++;
continue;
}
else
break;
}
//保存当前索引位置,作为输出单词的起始位置依据以及查找空白的开始位置依据
curPos = i;
//从单词的开始位置保存该单词的每个字母到result字符数组里
for (int j = curPos + 1; j <= curPos + wordLength; j++)
{
result[index] = orgString[j];
index++;
}
//查找两个单词间的空白
for (i = curPos; i >= 0; )
{
if (orgString[i] == ' ' || orgString[i] == '/t')
{
i--;
spaceLength++;
continue;
}
else
break;
}
//保存当前索引位置,作为输出空白的起始位置依据以及查找下一个单词的开始位置依据
curPos = i;
//保存空白字符到字符数组里
for (int j = curPos + 1; j <= curPos + spaceLength; j++)
{
result[index] = orgString[j];
index++;
}
//置单词长度变量和空白长度变量为0
wordLength = 0;
spaceLength = 0;
} while (curPos >= 0);
//输出结果
for (int i = 0; i < totalLength; i++)
Console.Write("{0}", result[i]);
Console.WriteLine();
}
相关文章推荐
- 以单词为单位对字符串进行翻转(用C#编写,但不用其中的库函数)
- 整型数组处理算法(十四)不用库函数,用C语言实现将一整型数转换成字符串
- 【字符串处理算法】将输入字符串中的各个单词反序的算法设计及C代码实现
- 关于一道面试题,使用C#实现字符串反转算法
- 不用库函数,用C语言实现将一整型数字转化为字符串
- C# 实现统计字符串中不同单词的出现次数【百度笔试题】
- 不使用c的任何库函数 实现字符串到整数的转换 整数到字符串的转换
- 字符串相关算法(编辑距离,最大公共字串)C#实现版
- 用C#实现字符串相似度算法(编辑距离算法 Levenshtein Distance)
- [算法] C# Revert 单词反转字符串[低时间复杂度]
- 实现将句子按单词为基本单位翻转的算法
- 不用库函数,用C语言实现将一整型数字转化为字符串
- 不用库函数和其它变量实现字符串反转...
- [ C++ ] [ 算法 ] [ 字符串处理 ] 以单词为单位将字符串倒序
- 输出字符串中最长的单词 C# 算法
- 仿淘宝,拍拍等查询关键词字符串编码算法实现(C#版),抛弃URLENCODE!
- 实现字符串中单词的逆转,即将单词出现的顺序进行逆转。如将"how are you "逆转为"you are how!"
- 用算法实现将一个输入的数字颠倒(输入12345->54321),要求不调用任何系统函数,也不能将输入的数字转换为字符串作为中间过渡
- 关于算法—— 一维字符串数组之间组合问题的C#实现
- C语言实现字符串中的单词的逆转