有一个字符数组的内容为:”student a am i”,请你将数组的内容改为”i am a student”.
要求:
不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。
#include <stdio.h>
#include <assert.h>
int my_strlen(const char *str)//求字符串长度函数
{
int count = 0;
assert(str);
while(*str != '\0')
{
count++;
str++;
}
return count;
}
void reverse(char a[],int left,int right)//逆序函数
{
while(left<right)
{
char tmp=a[left];
a[left]=a[right];
a[right]=tmp;
left++;
right--;
}
}
char* reverse_string(char a[])//逆序字符串
{
int i = 0;
int left = 0;
int right = my_strlen(a)-1;//逆序整个字符串
reverse(a,left,right);
//逆序逐个单词
while(a[i]!='\0')
{
left = i;
while((a[i]!='\0')&&(a[i]!=' '))
{
i++;
}
right=i-1;
reverse(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);
return 0;
}