Chinaunix首页 | 论坛 | 博客
  • 博客访问: 399105
  • 博文数量: 101
  • 博客积分: 2207
  • 博客等级: 大尉
  • 技术积分: 2508
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-19 20:45
文章分类

全部博文(101)

文章存档

2013年(15)

2012年(86)

我的朋友

分类: C/C++

2012-09-25 00:14:54

题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。
为简单起见,标点符号和普通字母一样处理。
例如输入I am a student.,则输出student. a am I。

点击(此处)折叠或打开

  1. #include <iostream>
  2. #include <string>

  3. void MyReverse(std::string& str, int i,int j)
  4. {
  5.     for (; i < j; ++i,--j)
  6.     {
  7.         char temp = str[i];
  8.         str[i] = str[j];
  9.         str[j] = temp;
  10.     }
  11. }
  12. void Reverse(std::string& str)
  13. {

  14.     MyReverse(str,0,str.size()-1);
  15.     int begin = -1,end = -1;
  16.     
  17.     int i = 0;
  18.     while (str[i])
  19.     {
  20.         while (str[i] && (str[i] == ' ' || str[i] == '\t' || str[i] == '\n')) i++;
  21.         begin = i;
  22.         while (str[i] && str[i] != ' ' && str[i] != '\t' && str[i] != '\n') i++;
  23.         end = i-1;
  24.         reverse(str,begin,end);
  25.     }
  26. }

  27. int main()
  28. {
  29.     std::string str = "I am a student.";
  30.     Reverse(str);
  31.     std::cout << str << std::endl;
  32. }

阅读(407) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~