【代码】反转字符串

反转字符串
 
在《 微软面试题——反转字符串 》中给出了一个简单的字符串的反转的实现和分析,可能是因为微软两个字的原因,引起很多人的兴趣和关心:),实际上这也是很多企业等的笔试或者面试题目(或者是在这个基础上的一些变体)。有仁兄在回复中提到题目的意思应该是把字符串中按照单词进行反转,例如“ I love you ”变为“ you love I ”,要说明的是原始的题目意思就是简单将整个字符串的内容当作一个整体进行反转,但是我觉得这种按照字符串中单词进行反转也是有意义和作用的,因此写了个实现:)。
 
 

实现的思想很简单,首先将整个字符串反转,然后找到单词反转。

下面是使用这种方法具体代码:
 
/************************************************************************/
// 函数名称: Ustrlen
// 输入参数: strSource,待求长度字符串;
// 输出参数: int,字符串的长度。
// 描    述: 通过判断字符'/0'来得到字符串的长度
/************************************************************************/
int Ustrlen(const char *strSource)
{
     // 声明变量
     int iLength(0);
     // 遍历字符串,查找字符'/0'
     while(*strSource++ != '/0')
     {
         ++iLength;
     }
     // 返回字符串的长度
     return iLength;
}
/************************************************************************/
// 函数名称: _ReversalChar
// 输入参数: strSouce,待反转字符串;iStart,旋转字符串开始位置;iEnd,旋转字符串结束位置
// 输出参数: char*,反转后字符串的指针;
// 描    述: 反转iStart到字符串iEnd之间的字符串
/************************************************************************/
char* _ReversalChar(char *strSouce,int iStart,int iEnd)
{
     // 反转字符串
     for(;iEnd > iStart; ++iStart,--iEnd)
     {
         char ch;
         ch = strSouce[iStart];
         strSouce[iStart] = strSouce[iEnd];
         strSouce[iEnd] = ch;
     }
     // 返回字符串指针
     return strSouce;
}
 
/************************************************************************/
// 函数名称: ReversalChar
// 输入参数: strSource,待反转字符串
// 输出参数: char*,反转字符串后的指针
// 描    述: 按单词反转字符串
/************************************************************************/
char * ReversalChar(char *strSouce)
{
     // 获取字符串的长度
     int iLength = Ustrlen(strSouce);
 
     // 反转整个字符串
     _ReversalChar(strSouce,0,iLength-1);
 
     // 声明变量(单词的开始以及结束默认从0开始)
     int iStart(0),iEnd(0);
 
     // 查找单词
     // 像上面讨论的查找单词的情况,我们只需要修改这部分,就可以实现对不
     // 同格式类型单词进行处理,为了更好的通用性,其实最好把查找单词这部分
     // 作为单独一个函数,或者一个类来处理
     for(int i = 0; i < iLength; ++i)
     {
         // 查找空格分割符号
         if(strSouce[i] == ' ')
         {
              // 找到一个单词
              iEnd = i-1;
              // 对于只有一个字符的单词比如说(I)没有必要反转
              if(iStart < iEnd)
              {
                   // 反转单词
                   _ReversalChar(strSouce,iStart,iEnd);
              }
              // 记录下一个单词的开始位置
              iStart = i+1;
         }
         // 特殊处理几种常见标点符号
         else if(strSouce[i] == '!' || strSouce[i] == ',' || strSouce[i] == '.')
         {
              iStart = i+1;
         }
     }
     // 返回反转后的字符串
     return strSouce;
}

测试上面的方法:
char ch[] ="I am a student!!";
cout << "Source string: " << ch << endl;
cout << "Reversal string: " << ReversalChar(aa) << endl;
屏幕打印字符
Source string: I am a student!!
Reversal string: !!student a am I

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值