题解 | #单词倒排# 逻辑>>步骤

单词倒排

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

#include <stdio.h>
#include <string.h>
void back(char* arr, int sz)   //逆序函数
{
    int left = 0, right = sz - 1;
    while (left < right)
    {
        char tmp;
        tmp = arr[left];
        arr[left] = arr[right];
        arr[right] = tmp;
        left++;
        right--;
    }
}
int main()
{
    char rec[10000];
    scanf("%[^'\n']", rec);
    int sz = strlen(rec);
    for (int i = 0;i < sz;i++)   //先把其他间隔符替换成空格
    {
        if (rec[i] < 'A' || rec[i]>'Z' )
        {
            if (rec[i] < 'a' || rec[i]>'z')
            {
                rec[i] = ' ';
            }
        }
    }
    //整体倒序
    back(rec, strlen(rec));
    //单词倒序
    int pos = 0;int len = 0;int head = 0;
    while (pos < sz)
    {
        if (rec[pos] != ' ')
            len++;
        else if(rec[pos]==' '||rec[pos+1]=='\0')
        {
            back(&rec[head], len);
            len = 0;
            head = pos + 1;
        }
        pos++;
    }
    if(pos==sz)   //最后一组会由于pos==sz因而进不去循环,所以要单独拿出来
    {
        back(&rec[head],len);
    }
    printf("%s", rec);
    return 0;
}

全部评论

相关推荐

点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务