/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param str string字符串 * @return string字符串 */ //思路一: //单独一个反转函数(局部函数) //先字符串整体反转 //然后再确定每个单词范围,再局部反转 //首先是左指针i找到空格停下,自增1,右指针j接替寻找右边空格,将(i)-(j-1)的字符反转,更新i的值,继续找 //思路二: //定义两个栈,一个栈1负责中间过渡,栈2负责输出值 //对字符串从后往前判断是否为空格,不为则将将字符压入栈1,为空格则将栈1中的字符弹出到找2中,并将空格压入栈2 //此外最后栈1中还有最后一个字符,还要压入栈2 //思路一: //单独一个反转函数(局部函数) void reverword(char *s, int font, int rear) { char temp; while(font<rear) { temp = s[font]; s[font] = s[rear]; s[rear] = temp; font++; rear--; } } char* ReverseSentence(char* str ) { // write code here //先字符串整体反转 int i = 0, j = 0, n = strlen(str); reverword(str, 0, n-1); printf("%s\n", str); //然后利用空格再确定每个单词范围,再局部反转 //首先是左指针i找到空格停下,自增1,右指针j接替寻找右边空格,将(i)-(j-1)的字符反转,更新i的值,继续找 while (i<n) { while(str[i] == ' ') { i++; } j = i; //首先是左指针i找到空格停下,右指针j寻找右边空格 while(j<n && str[j] != ' ') { j++; } reverword(str, i, j-1); printf("%s\n", str); i = j; //更新i的值,继续找 } return str; }