字符串内容逆置(不能使用库函数只能开辟有限个空间)

有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student".
要求:不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)
注:先将字符数组整齐逆置“i ma a tneduts”,然后在调用一次reserve将字符串数组中的单个字符串逆置,就达到我们想要的结果 iam a student.
需要注意的点就是第二次逆置的时候确定当前要操作的字符串的开始和结束位置.
#include<stdio.h>
int strlen( const char* arr)//统计空格
{
	int count=0;
    while(*arr++)
	{
	  count++;
	 }
	return count;
}
void reserve(char* left,char* right)//
{
	while(left<right)
	{
	   
	   char tmp=*left;
	   *left=*right;
	   *right=tmp;
	   left++;
	   right--;
	}
}	
void reserve_buf( char arr[])
{
      int len=strlen(arr);
	  char* start=arr;
	  char* end=arr;
	  reserve(start,arr+len-1);//i ma a tneduts
	  while(*end!='\0')
	  {
	    while(*end!=' '&&*end!='\0')
		{
		  end++;
		}
	    end--;
		reserve(start,end);//i am a student
	    if(*(end+1)!='\0')
		{
		  end=end+2;
		  start=end;
		}
		else
			end++;
	   }
   }
int main()
{
  char arr[]="student a am i";
  reserve_buf(arr);
  printf("%s",arr);
  system("pause");
  return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值