游客 Signup | Login
中文 | En

1675 - 加密

ACM俱乐部里面有些秘密文件(英文的),我们要把它进行加密。对每一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。

Input

输入有多组数据。

每组数据一行,包含一个字符串(长度<=1000),为需要加密的字符串。

Output

对应每组数据,输出加密后的字符串。

Examples

Input

I am a student.
I love you.

Output

student. a am I
you. love I

Solution C

/*
 * =====================================================================================
 *
 *       Filename:  902-3.c
 *
 *    Description:  ihahah
 *
 *        Version:  1.0
 *        Created:  2013/9/3 0:32:01
 *       Revision:  none
 *       Compiler:  gcc
 *
 *         Author:  mdk-vim.cpp-c (mdk), mengdaikun@gmail.com
 *        Company:  cjluacm-vim-mdk
 *
 * =====================================================================================
 */
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

char s[1001];
 
void reverse(int begin,int end)
{
    while(begin<end)
    {
        char temp=s[begin];
        s[begin]=s[end];
        s[end]=temp;
        ++begin;
        --end;
    }
}
 
int main()
{
    //freopen("a.in","r",stdin);
    
    while(gets(s))
    {
        int len=strlen(s),begin=0;
        
        reverse(0,len-1);
        
        int i;

        for(i=0;i<len;i++)
        {
            if(s[i]!=' ')
            {
                if(i>0&&s[i-1]==' ')
                    begin=i;
                else if(i<len-1&&s[i+1]==' ' || i==len-1)
                    reverse(begin,i);
            }
        }
        
        printf("%s\n",s);
    }
    return 0;
}
 


Solution C++

#include <stdio.h>
///////////////////////////////////////////////////////////////////////
// Reverse a string between two pointers
// Input: pBegin - the begin pointer in a string
//        pEnd   - the end pointer in a string
///////////////////////////////////////////////////////////////////////
void Reverse(char *pBegin, char *pEnd)
{
      if(pBegin == NULL || pEnd == NULL)
            return;

      while(pBegin < pEnd)
      {
            char temp = *pBegin;
            *pBegin = *pEnd;
            *pEnd = temp;

            pBegin ++, pEnd --;
      }
}
///////////////////////////////////////////////////////////////////////
// Reverse the word order in a sentence, but maintain the character
// order inside a word
// Input: pData - the sentence to be reversed
///////////////////////////////////////////////////////////////////////
char* ReverseSentence(char *pData)
{
      if(pData == NULL)
            return NULL;

      char *pBegin = pData;
      char *pEnd = pData;

      while(*pEnd != '\0')
            pEnd ++;
      pEnd--;

      // Reverse the whole sentence
      Reverse(pBegin, pEnd);

      // Reverse every word in the sentence
      pBegin = pEnd = pData;
      while(*pBegin != '\0')
      {
            if(*pBegin == ' ')
            {
                  pBegin ++;
                  pEnd ++;
                  continue;
            }
            // A word is between with pBegin and pEnd, reverse it
            else if(*pEnd == ' ' || *pEnd == '\0')
            {
                  Reverse(pBegin, --pEnd);
                  pBegin = ++pEnd;
            }
            else
            {
                  pEnd ++;
            }
      }

      return pData;
}
int main()
{
	char s[9999];
	gets(s);
	while(s[0]!=0)
	{
		printf("%s\n",ReverseSentence(s));
		s[0]=0;
		gets(s);
	}
	return 0;
} 
Time Limit 1 second
Memory Limit 32 MB
Discuss Stats
上一题 下一题