zoukankan      html  css  js  c++  java
  • C++ 工程师养成 每日一题4.5 (迭代器遍历)

    首先说明,当每日一题标号不是整数时代表此题是较为简单的,我在这里整理一遍主要是我做错了(没错是我太菜各位大佬无视就好)

    题目:

    读入一个字符串str,输出字符串str中的连续最长的数字串

    此题思路清晰下面给出我自己的解法:

    我第一次做的正确答案时使用迭代器进行遍历完成的

     1 #include<iostream>
     2 #include<string>
     3 using namespace std;
     4 void FFind(string s){
     5     auto it = s.begin();
     6     string a,res;
     7     while (it != s.end()){
     8         if (*it >= 48 && *it <= 57){
     9             a =a + *it;
    10         }
    11         else{
    12             if (a.size() > res.size()){
    13                 res = a;
    14                 a.clear();
    15             }
    16             else{
    17                 a.clear();
    18             }
    19         }
    20         it++;
    21     }
    22     if (a.size() > res.size()){         //因为取不到end()位置会引发程序崩溃,所以使用迭代器的话在遍历最后一个位置的时候就必须在循环外在此判断一次条件,不美观且降低了程序可读性
    23         res = a;
    24     }
    25     cout << res;
    26 }
    27 int main(){
    28     string s;
    29     getline(cin, s);
    30     FFind(s);
    31     return 0;
    32 }

    在写完之后我果断去找了其他大佬写的程序,才发现我这个人老把问题想得太麻烦!!

    老是忘记string也可以使用[ ] 来取内容,这样遍历就不会造成无法判断最后一次循环(最后一个位置的下一个位置)

    大佬答案如下:

     1 #include<iostream>
     2 using namespace std;
     3 #include<string>
     4 int main()
     5 {
     6     string s, res, cur;
     7     cin >> s;
     8     for (int i = 0; i <= s.length(); i++)
     9     {
    10                                                        
    11         if (s[i] >= '0' && s[i] <= '9')                 //使用 [ ] 符来取内容 
    12         {
    13             cur += s[i];                                
    14         }
    15         else
    16         {
    17                                                            // 找出更长的字符串,则更新字符串
    18             if (res.size() < cur.size())
    19                 res = cur;
    20             else
    21                 cur.clear();
    22         }
    23     }
    24     cout << res;
    25     return 0;
    26 }

    菠菜~贱卖,菠菜!贱卖!!菠菜!!贱卖!!!菠 ‘ 菜 ’  !!!!

  • 相关阅读:
    EAX、ECX、EDX、EBX寄存器的作用
    MFC VS2005 添加Override 和 Message
    ActiveX添加测试工程, 出现的问题[非选择性参数][找不到成员]
    两种应该掌握的排序方法--------2.quick Sort
    关于I/O的那点事
    整理一下 编码、解码库
    VC一些经验系列: 《分享泄漏检测工具:内存、DC、GDI、Handle... 》
    golang安装卸载 linux+windows+raspberryPI 平台
    (转)如何正确使用C++多重继承
    单播、多播(也称组播)、广播
  • 原文地址:https://www.cnblogs.com/Kaniso-Vok/p/11832501.html
Copyright © 2011-2022 走看看