列表

详情


XM5. 句子反转

描述

给定一个句子(只包含字母和空格), 将句子中的单词位置反转,单词用空格分割, 单词之间只有一个空格,前后没有空格。 比如: (1) “hello xiao mi”-> “mi xiao hello”

输入描述

输入数据有多组,每组占一行,包含一个句子(句子长度小于1000个字符)

输出描述

对于每个测试示例,要求输出句子中单词反转后形成的句子

示例1

输入:

hello xiao mi

输出:

mi xiao hello

原站题解

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

#include <stdio.h>
#include <string.h>
main()
{
    char a[1000];
    int len,i,j;
    gets(a);
    len=strlen(a);
    for(i=len-1;i>=0;i--)
    {
      if(a[i]==' ')
        {
            for(j=i+1;a[j]!='\0'&&a[j]!=' ';j++)
                printf("%c",a[j]);
            printf(" ");
       }
    }
    i=0;
    while(a[i]!=' ')
        i++;
    for(j=0;j<i;j++)
    printf("%c",a[j]);
}

Pascal 解法, 执行用时: 1ms, 内存消耗: 232KB, 提交时间: 2018-09-16

var st:ansistring;
    i,l,s:longint;
    word:array[1..1000] of ansistring;
begin
  readln(st);
  l:=length(st);
  s:=1;
  for i:=1 to l do
   if st[i]=' ' then
    inc(s)
   else
    word[s]:=word[s]+st[i];
  for i:=s downto 2 do
   write(word[i],' ');
  writeln(word[1]);
end.

C 解法, 执行用时: 1ms, 内存消耗: 352KB, 提交时间: 2018-09-30

#include <stdio.h>

int main()
{
    int num, i, j;
    char *input = malloc(sizeof(char)*500);
    char output[100][20];
    
    gets(input);
    
    i = 0;
    num = 0;
    while(input[i] != '\0')
    {
        j = 0;
        while(input[i] != ' ' && input[i] != '\0')
        {
            output[num][j] = input[i];
            j++;
            i++;
        }
        output[num][j] = '\0';
        i++;        //skip ' '
        num++;
    }
    
    for( num=num-1; num >= 0; num--)
    {
        printf("%s", output[num]);
        if(num != 0)
            printf(" ");
    }
    
    return 0;
}

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

#include <stdio.h>
#include <string.h>
main()
{
	char a[1000];
	int len,i,j;
	gets(a);
	len=strlen(a);
	for(i=len-1;i>=0;i--)
	{
	  if(a[i]==' ')
		{
			for(j=i+1;a[j]!='\0'&&a[j]!=' ';j++)
				printf("%c",a[j]);
			printf(" ");
	   }
	}
	i=0;
	while(a[i]!=' ')
		i++;
	for(j=0;j<i;j++)
    printf("%c",a[j]);
}

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

/*#include<stdio.h>
#include<string.h>
int main(void)
{
    char a[1000];
    int len,i,j;
    gets(a);
    len=strlen(a);
    for(int i=len-1;i>=0;i--)
    {
        if(a[i]==' ')
        {
            for(int j=i+1;a[j]!='\0'&&a[j]!=' ';j++)
                printf("%c",a[j]);
            printf(" ");
        }
    }
    i=0;
    while(a[i]!=' ')
        i++;
    for(j=0;j<i;j++)
      printf("%c",a[j]);
    return 0;
}*/
#include <stdio.h>
#include <string.h>
main()
{
    char a[1000];
    int len,i,j;
    gets(a);
    len=strlen(a);
    for(i=len-1;i>=0;i--)
    {
      if(a[i]==' ')
        {
            for(j=i+1;a[j]!='\0'&&a[j]!=' ';j++)
                printf("%c",a[j]);
            printf(" ");
       }
    }
    i=0;
    while(a[i]!=' ')
        i++;
    for(j=0;j<i;j++)
    printf("%c",a[j]);
}

上一题