#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include <assert.h> void reverse_arr(char *left, char *right) { assert(left); assert(right); while (left < right) { char tmp = *left; *left = *right; *right = tmp; left++; right--; } } int my_strlen(const char *str) { int count = 0; while (*str++) { count++; } return count; } void reverse(char arr[]) { char *pstart = arr;//数组和指针结合使用,把数组的首地址给指针变量pstart char *pend = arr + my_strlen(arr) - 1;//把数组最后一个元素的地址给指针变量pend char *pcur = NULL;//用来做中间变量,传递地址的 if (arr == NULL || arr[0] == ‘\0‘)//判断首地址是否为空,字符串是否为空,如果是直接结束 { return; } reverse_arr(pstart, pend);//逆置数组 while (*arr)//控制数组里面的内容,遍历判断 { pcur = arr; while (*arr != ‘\0‘&&*arr != ‘ ‘)//找空格确定一个整体的单词,然后逆置 { arr++; } pend = arr - 1; reverse_arr(pcur, pend); if (*arr == ‘ ‘) arr++; } } int main() { char arr[] = "student a am i"; reverse(arr); printf("%s\n", arr); system("pause"); return 0; }
【C语言】【面试题】【笔试题】使用有限空间,不使用库函数,逆置“student a am i”
原文:http://10740329.blog.51cto.com/10730329/1708376