用数组实现:
#include <stdio.h>
int strlen(char *arr)
{
char *ret=arr;
while((*ret++)!='\0')
;
return ret-arr-1;
}
char* reserve_a(char *arr)
{
int sz = strlen(arr);
int lift = 0;
char tem;
int i = 0;
int right = sz - 1;
while((lift)<(right))
{
tem = arr[lift];
arr[lift] = arr[right];
arr[right] = tem;
lift++;
right--;
}
return arr;
}
char* reserve(char *arr)
{
int sz = strlen(arr);
int i = 0;
int j = 0;
int k = 0;
int temp = 0;
int count = 0;
char tem[10];
reserve_a(arr);
for(i=0; i<sz; i++)
{
if(arr[i]!=' ')
count++;
else
count = 0;
if(count>=2&&((arr[i+1]==' ')||(arr[i+1]=='\0')))
{
temp = count;
for(j=0; j<temp; j++)
{
tem[j] = arr[i-count+1];
count--;
tem[j+1] = '\0';
}
count = temp;
reserve_a(tem);
for(k=0; k<temp; k++)
{
arr[i-count+1] = tem[k];
count--;
}
}
}
return arr;
}
int main()
{
char a[] = "student a am i ";
printf("%s\n",reserve(a));
return 0;
}
不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。
这个时候就要用到指针了。
#include <stdio.h>
int my_strlen(const char *arr)
{
const char *ret = arr;
while ((*ret++)!='\0');
return ret-arr-1 ;
}
void *reverse(char *p,char *q)
{
char tem;
while(p<=q)
{
tem = *p;
*p++ = *q;
*q-- = tem;
}
}
char *reverse_(const char*p)
{
int size = my_strlen(p);
const char *q = p +size -1;
const char *t = p;
reverse(p,q);
q=t;
while(q<=t+size)
{
if((*q==' ')||(*q=='\0'))
{
--q;
reverse(p,q);
q+=2;
p=q;
}
else
q++;
}
return t;
}
int main()
{
char arr[] = "student a am i";
printf("%s\n",reverse_(arr));
return 0;
}