码迷,mamicode.com
首页 > 其他好文 > 详细

IT公司100题-10-翻转句子中单词的顺序

时间:2014-08-08 15:47:06      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   io   strong   art   

问题描述:
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。
句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。
例如输入“Hello world!”,则输出“world! Hello”。
 
分析:
 
先翻转各个单词,然后整体翻转即可。
 

参考代码

 1 // 10.cc
 2 #include <iostream>
 3 #include <cstring>
 4 #include <string>
 5 using namespace std;
 6 
 7 void reverse(char* p_start, char* p_end) {
 8     char t;
 9     while(p_start < p_end) {
10         t = *p_start;
11         *p_start = *p_end;
12         *p_end = t;
13 
14         p_start++;
15         p_end--;
16     }
17 }
18 
19 char* reverse_str(char* str) {
20     if (NULL == str)
21         return NULL;
22 
23     char* p_start = str;
24     char* p_end = str;
25 
26     // 翻转每个单词
27     while(*p_start != \0) {
28         if(*p_start ==  ) {
29             p_start++;
30             p_end++;
31         } else if (*p_end ==   || *p_end == \0) {
32             reverse(p_start, --p_end);
33             p_start = ++p_end;
34         } else {
35             p_end++;
36         }
37     }
38 
39     p_end = --p_start;
40     p_start = str;
41     // 整体翻转
42     reverse(p_start, p_end);
43 
44     return str;
45 }
46 
47 int main() {
48     cout << "input a string:" << endl;
49     string s;
50     getline(cin, s);
51     char *p = new char[s.size() + 1];
52     strcpy(p, s.c_str());
53     reverse_str(p);
54     cout << p << endl;
55 
56     delete []p;
57     return 0;
58 }

 转载自源代码

本文链接地址: http://w.worthsee.com/index.php/10-%e7%bf%bb%e8%bd%ac%e5%8f%a5%e5%ad%90%e4%b8%ad%e5%8d%95%e8%af%8d%e7%9a%84%

IT公司100题-10-翻转句子中单词的顺序,布布扣,bubuko.com

IT公司100题-10-翻转句子中单词的顺序

标签:style   blog   http   color   os   io   strong   art   

原文地址:http://www.cnblogs.com/dracohan/p/3899231.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!