#include
#include
void my_reverse(char *left ,char * right)
{
assert(left);
assert(right); //用以处理指针函数为空,保证有效
while(left
{
char tmp = *left; //借助中间变量实现逆置
*left = *right;
*right = tmp;
left ++;
right --;
}
}
int my_strlen(char *str)//得到数组长度定义求取字符串长度的函数
{
int count = 0;
while(*str++)
{
count ++;
}
return count; //返回count指向int型的具体值
}
void reverse(char arr[]) //char *arr
{
char *pstart = arr;
char *pend = arr + my_strlen(arr) -1; //注意数组从0开始
char *pcur = NULL;
if((arr == NULL) || (arr[0]=='\0')) //空数组或数组结束,不处理
{
return ;
}
my_reverse(pstart,pend); //逆置整个数组
while(*arr)//不为NULL,为‘\0’的情况
{
pcur =arr; //数组开始地址
while(*arr !='\0' && *arr !=' ') //在单词内部时
{
arr++;
}
pend =arr - 1; //退一位
my_reverse(pcur, pend); //逆置遇到空格的单词
if(*arr == ' ') //说明后面还有单词
{
arr++;
}
}
}
int main()
{
char arr[] = "student a am i";
//思路:先将字符串逆置,再遇到空格处将该单词逆置即可
reverse(arr);
printf("%s\n",arr);
return 0;
}