zoukankan      html  css  js  c++  java
  • C++ 工程师养成 每日一题fourth (reverse的使用)

    题目:

    将一句话的单词进行倒置,标点不倒置。

     这道题最简单的解法是使用algorithm提供的reverse()函数

    具体步骤我写在代码注释里面:

     1 #include <string>
     2 #include <algorithm>
     3 int main(){
     4     string s;
     5     getline(cin, s);      //输入的字符串中包含空格,所以不能使用cin输入(遇到空格会停止),使用getline读取全部的字符(遇到换行符、EOF、自定义符号停止)
     6     auto it = s.begin();  //本体我选择用迭代器进行遍历字符串
     7     reverse(s.begin(), s.end());    //第一步先将整个字符串逆置,之后再分别将每一个单词逆置
     8     while (it!=s.end()){
     9         auto ii = it;
    10         while (ii != s.end() && *ii != ' '){    //找到一个单词的结束位置
    11             ii++;
    12         }
    13         reverse(it, ii);                    //逆置当前单词
    14         if (ii != s.end()){          
    15             it = ii + 1;               //重新定义下一个单词的开头位置,+1是因为单词之间只有一个‘ ’
    16             ii++;
    17         }
    18         else{                         //若当前是最后一个位置,则直接给予结束条件结束循环
    19             it = s.end();
    20         }
    21     }
    22     cout << s;        //输出结果
    23     return 0;
    24 }

    此次最主要的点就是熟悉reverse()的使用

    但是单单就这一道题来说还有更优解法,也是我在写完之后才发现其他大佬写的,这里分享出来给大家:

     1 #include<iostream>
     2 using namespace std;
     3 #include<string>
     4 int main()
     5 {
     6     string s1;
     7     string s2;
     8 
     9     cin >> s1;
    10 
    11     while (cin >> s2&&getchar() != '
    ')
    12     {
    13         s1 = s2 + " " + s1;
    14     }
    15 
    16     cout << s2 << " " << s1 << endl;
    17     return 0;
    18 }

    看完表示我确实是菜。。。。

  • 相关阅读:
    C/C++学习的50个经典网站
    C++ 调用C++写的函数库的2种方法之一(显式调用)
    C++ 调用C++写的类库的2种方法之一(隐式链接)
    几个第三方yum源
    网站运维管理工具
    网站架构文章收集
    linux setup 相关text mode图形配置工具的安装
    nfs 安装配置
    centos6.4 minimal 安装kvm
    keepalived
  • 原文地址:https://www.cnblogs.com/Kaniso-Vok/p/11832459.html
Copyright © 2011-2022 走看看