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