题解 | #翻转单词序列#

翻转单词序列

https://www.nowcoder.com/practice/3194a4f4cf814f63919d0790578d51f3

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @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;
}

全部评论

相关推荐

2024-12-29 19:48
河北科技大学 Java
没事就爱看简历:问题不在于简历:1、大学主修课程学那么多应用语言,作为计算机专业是很难理解的。 2、技能部分,每一个技能点的后半句话,说明对熟练,熟悉的标准有明显误会。 3、项目应该是校企合作的练习吧,这个项目你负责什么,取得了哪些成果都没有提及,只是列举了你认为有技术含量的点,而这些都有成熟的实现。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务