题解 | #单词倒排#

单词倒排

https://www.nowcoder.com/practice/81544a4989df4109b33c2d65037c5836

#include <stdio.h>
#include <string.h>
#include <assert.h>

void reverse(char* left, char* right)
{
    assert(left && right);

    while (left <= right)
    {
        int ret = *left;
        *left = *right;
        *right = ret;
        left++;
        right--;
    }
}

int main()
{
    char ch[10001] = { 0 };
    int i = 0;
    while ((ch[i] = getchar()) != '\n')
    {
        if ((ch[i] < 'A' || ch[i] > 'Z') && (ch[i] < 'a' || ch[i] > 'z'))
        {
            ch[i] = ' ';
        }
        i++;
    }
    //删除换行符
    ch[i] = 0;

    int sz = strlen(ch) - 1;
    //先逆置整个字符串
    reverse(ch, ch + sz);
    
    //再逆置单词
    char* pc = ch;
    while (*pc)
    {
        char* start = pc;
        char* end = pc;
        while (*end != ' ' && *end != '\0')
        {
            end++;
        }
        reverse(start, end - 1);
        if (end != '\0')
            pc = end + 1;
        else
            pc = end;
    }

    //将多个空格转换为一个空格进行输出
    char* end = ch;
    char* start = ch;
    while (*end)
    {
        if (*end != ' ')
            printf("%c", *end++);
        else
        {
            start = end;
            while (*start == ' ')
            {
                start++;
            }
            end = start;
            printf(" ");
        }
    }

    return 0;
}

全部评论

相关推荐

快点约我面试吧
投递百度等公司10个岗位
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-21 13:41
点赞 评论 收藏
分享
06-25 09:33
厦门大学 Java
球球别拷打俺了:现在日常估计没啥hc了,等到八月多估计就慢慢有了。双九✌🏻不用焦虑的
投递快手等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务