微软面试题 student a am i.

有一个字符数组的内容为:"student a am i",
请你将数组的内容改为"i am a student".
要求:
不能使用库函数。
只能开辟有限个空间(空间个数和字符串的长度无关)。

思路是三个函数.首先就是求字符串的长度.   其次是字符串整体逆转.  最后是局部逆转.里面可能用到指针.注意逆转的相关操作.

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
int strlen(char* str)
{
  int count=0;
  while(*str)
  {
    count++;
    str++;
  }
  return count;
}
void reverse_str(char* left,char* right)
{
  while(left<right)
  {
    //保留头的内容
    char temp=*left;
    //把头的内容置换成尾的内容
    *left=*right;
    //把尾的内容置换成头的内容
    *right=temp;
    //头向后移动,尾向前移动
    left++;
    right--;
  }
}
  void reverse(char* str)
  {
    char* left=str;
    char* right=str+strlen(str)-1;
    char* cur=str;
    reverse_str(left,right);//整体逆转一次
    while(*cur)
    {
      char* start=cur;
      while((*cur!=' ')&&(*cur!='\0'))
      {
        cur++;
      }
      //逆转字串
      reverse_str(start,cur-1);
      if(*cur==' ')
      {
        cur++;
      }
    }
  }
int main()
{
  char arr[]="student a am i";
  reverse(arr);
  printf("%s",arr);
  return 0;
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值