有一个字符数组的内容为:"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;
}