列表

详情


HJ13. 句子逆序

描述

将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”

所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符

数据范围:输入的字符串长度满足

注意本题有多组输入

输入描述

输入一个英文语句,每个单词用空格隔开。保证输入只包含空格和字母。

输出描述

得到逆序的句子

示例1

输入:

I am a boy

输出:

boy a am I

示例2

输入:

nowcoder

输出:

nowcoder

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C 解法, 执行用时: 1ms, 内存消耗: 224KB, 提交时间: 2018-08-13

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

int main()
{
    char str[10000];
    int a,len,i;
    gets(str);
    len = strlen(str);
    for(i=len-1;i>=0;i--)
    {
        if(str[i]==' ')
        {
            a = i+1;
            while(str[a]!=' ')
            {
                if(a==len)
                    break;
                printf("%c", str[a]);
                a++;
            }
            printf(" ");
        }

    }
    i=0;
    while(str[i]!=' ')
    {
        printf("%c",str[i]);
        i++;
    }
    return 0;
}

C 解法, 执行用时: 1ms, 内存消耗: 256KB, 提交时间: 2020-07-07

#include "stdio.h"

int main()
{
    char s[10000] = {0};
    char chr = 0;
    int len = 0;
    int flag = 0;
    int  end=0,start=0;
    while (1)
    {
        scanf("%c", &chr);
        if (chr == '\n')
            break;
        
        s[len++] = chr;
    }
    
    for (int i=len;i>0;i--)
    {
        if (s[i-1] != ' ') // 
        {
            if (flag == 0)
            {
                flag = 1;
                end = i;
            }
        }
        else
        {
            // if (flag == 1)
            {
                flag = 0;
                start = i;
                for (int j=start;j<end;j++)
                    printf("%c",s[j]);
                printf(" ");
                start = 0;
                end = 0;
            }
        }
        if (i==1)
        {
                for (int j=start;j<end;j++)
                    printf("%c",s[j]);
                printf("\n");
        }
    }
}

上一题