题目描述
有一个字符数组的内容为“student a am i”. 请你将数组的内容改为“i am a student”.
要求
不能使用库函数,只能开辟有限个空间(空间个数和字符串的长度无关)。
第一种是利用数组实现的解决方案
方案一:
#include<stdio.h>
#include<assert.h>
void swap(char *a,int left,int right)
{
char t;
while(left<right)
{
t = a[left];
a[left] = a[right];
a[right] = t;
right--;
left++;
}
}
int main()
{
char a[] = "ren hui she gei song sheng zhang";
int i = 0;
int left = 0;
int right = 0;
printf("%s\n",a);
swap(a, 0, sizeof(a)-2);
printf("%d\n%s\n",sizeof(a),a);
i = 0;
while(a[i])
{
while((a[i] != ' ')&&(a[i] != '\0'))
{
right++;
i++;
}
swap(a,left,right-1);
if(a[i])
{
left = right+1;
right = left;
i++;
}
}
printf("%s\n",a);
return 0;
}
但是用数组是很不方便的,接下来我又给出了利用指针实现的解决方案。
方案二:
#include<stdio.h>
#include<assert.h>
int my_strlen(const char *p)
{
assert(p != NULL);
int count = 0;
while(*p++)
{
count++;
}
return count;
}
void swap(char *left,char *right)
{
assert(left !=NULL);
assert(right !=NULL);
while(left<right)
{
char t = *left;
*left = *right;
*right = t;
right--;
left++;
}
}
int main()
{
char a[] = "student a am i";
char *p = a;
char *left = a;
char *right = a;
printf("%s\n",a);
swap(p,p+my_strlen(a)-1);
printf("%s\n",a);
while(*p)
{
while((*p != ' ')&&(*p != '\0'))
{
right++;
p++;
}
swap(left,right-1);
if(*p)
{
left = right+1;
right = left;
p++;
}
}
printf("%s\n",a);
return 0;
}
还是用指针比较方便。。。