1675 - 加密
时间限制 : 1 秒
内存限制 : 32 MB
ACM俱乐部里面有些秘密文件(英文的),我们要把它进行加密。对每一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。
题目输入
输入有多组数据。
每组数据一行,包含一个字符串(长度<=1000),为需要加密的字符串。
题目输出
对应每组数据,输出加密后的字符串。
输入/输出样例
输入格式
I am a student. I love you.
输出格式
student. a am I you. love I
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; }
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; }
Java解答
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner cin = new Scanner(System.in); while(cin.hasNext()) { String str = cin.nextLine(); revString(str); } } public static String revString(String str) { StringBuilder builder = new StringBuilder(); builder.append("begin "); builder.append(str); builder.append(" end"); String []subStrings = builder.toString().split(" "); for(int i= subStrings.length -2 ;i>=2;i-- ){ System.out.print(subStrings[i]+" "); } System.out.println(subStrings[1]); return null; } }