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=25main.cpp1 #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 阅读(362) 评论(0) 编辑 收藏 举报