ACM&翻转单词顺序

翻转单词顺序

题目描述:
JOBDU最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
输入:
每个测试案例为一行,表示一句英文句子。
我们保证一个句子的单词数不会超过600,每个单词的长度也不会超过30。但是需要注意的是Fish是个不拘小节的人,有时候两个单词中间可能会有很多空格。为了方便起见,你可以认为一行的字符总数不会超过50000个,标点符号可以和普通字母一样处理。
输出:
对应每个测试案例,把翻转后的正确的句子单独输出一行。
样例输入:
student. a am I
I'm a Freshman and I like JOBDU!
样例输出:
I am a student.
JOBDU! like I and Freshman a I'm
http://ac.jobdu.com/problem.php?cid=1039&pid=25
main.cpp
 1 #include
 2 
 3 #include
 4 
 5 #define N 50005
 6 
 7  
 8 
 9 using namespace std;
10 
11  
12 
13 void swap(char* str, int begin, int end );
14 
15  
16 
17 int main()
18 
19 {
20 
21     char str[N];
22 
23  
24 
25     while( cin.getline(str, N) ) {
26 
27     int len = strlen(str);
28 
29     int begin, end;
30 
31     begin = end = 0;
32 
33     swap(str, 0, len);
34 
35  
36 
37     while(end < len) {
38 
39         while(str[end] != ' ' && str[end] != '\0') end++;
40 
41  
42 
43         swap(str, begin, end);
44 
45         begin = end;
46 
47         while(str[++begin] == ' ') ;
48 
49         end = begin;
50 
51  
52 
53         }
54 
55  
56 
57     cout << str <
58 
59  
60 
61     }
62 
63  
64 
65     return 0;
66 
67 }
68 
69  
70 
71 void swap(char* str, int begin, int end )
72 
73 {
74 
75     char temp;
76 
77     end--;
78 
79     while(begin < end){
80 
81         temp = str[begin];
82 
83         str[begin] = str[end];
84 
85         str[end] = temp;
86 
87         begin++;
88 
89         end--;
90 
91         }
92 
93 }

 

posted on 2013-03-12 22:14  Zachary_wiz  阅读(359)  评论(0编辑  收藏  举报

导航