有一个字符数组的内容为:”student a am i”,请你将数组的内容改为”i am a student”. 要求: 不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。 int my_strlen(char* str) { int count = 0; while(*str != '\0') { count++; str++; } return count; } void Reverse(char* left, char* right) { char tmp = 0; while(left<right) { tmp = *left; *left = *right; *right = tmp; left++; right--; } } void reverse(char* str) { //assert(*str != NULL) char*left = NULL; while(*str != '\0') { left = str; while((*str != ' ') && (*str != '\0'))//如果没有第二个条件到最后一组将停不下来 { str++; } if(*str == ' ')//如果指到空格或者\0退回来,防止将\0拷贝到前面 { str--;//str指向' ' Reverse(left, str); str+=2; } if(*str == '\0') { Reverse(left, str-1);//str-1是因为str在上面++后指的是/0 } } } int main() { char arr[] = "student a am i"; int len = 0; len = my_strlen(arr); Reverse(arr, arr+len-1);//先将整体反转 reverse(arr);//再将每一个单词反转 printf("%s\n", arr); return 0; }