#include<stdio.h> //#include <assert.h> void my_reverse(char *left ,char * right) { //assert(left); //assert(right); 用以处理指针函数为空,保证有效 while(left < right) { 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; }
时间: 2024-10-05 04:27:24