#include<stdio.h> #include<string.h> #include<assert.h> void nb2(char* arr) { int right = strlen(arr) - 1; char left = *arr; *arr = *(arr + right); *(arr + right) = '\0'; if (strlen(arr + 1) >= 2) nb2(arr + 1); *(arr + right) = left; } void nb3(char* arr) { int left = 0; int right = 0; int i = 0; while (i <= strlen(arr) - 1) { while ( arr[i] != 32 && i <= strlen(arr) - 1) //这里的空格判断【32】,不要写成arr[i] != '32'【这样是不等于3和2的ASCII码】 { //而写成arr[i] != 32才是正确的。 i++; } right = i - 1; while (left < right) { char temp = *(arr + left); *(arr + left) = *(arr + right); *(arr + right) = temp; left++; right--; } left = i + 1; i++; } } void nb(char* arr) //abc. _nb? "cnm" == "mnc" ?bn_ .cba == "cnm" _nb? abc. { assert(arr != NULL); nb2(arr); //整体逆置 nb3(arr); //部分逆置 } int main() { char arr[101] = { 0 }; //abc. _nb? "cnm" == "mnc" ?bn_ .cba == "cnm" _nb? abc. char ch; int i = 0; for (i = 0; (ch = getchar()) != '\n' && ch != EOF; i++) { arr[i] = ch; } nb(arr); printf("%s\n", arr); return 0; }