在做这个题之前,我们先对此分析:首先我们将字符串全都逆置:student a am i-->i ma a tneduts,然后我们在将每个单词逆置得到:i am a student.
有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student".
要求:
不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)
#include<stdio.h>
#include<windows.h>
#include<assert.h>
void reverse_str(char a[],int left,int right)
{
while(left<right)
{
a[left]^=a[right];
a[right]^=a[left];
a[left]^=a[right];
left++;
right--;
}
}
char* reverse_string(char a[])
{
int i=0;
int left=0;
int right=strlen(a)-1;
reverse_str(a,left,right);//全部逆置
while(a[i])
{
left=i;
if((a[i]!='\0')&&(a[i]!=' '))
{
i++;
}
right=i-1;
reverse_str(a, left, right);//每个单词逆置
if(a[i]!='\0')
{
i++;
}
}
return a;
}
int main()
{
char a[]="student a am i";
reverse_string(a);
printf("%s\n",a);
system("pause");
return 0;
}