VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 254|回复: 4

《实用C++》第52课小作业,循环检测有点太笨了,要如何优化?

[复制链接]
63_avatar_middle
最佳答案
1 
donate_vip 发表于 2019-11-5 16:29:40 | 显示全部楼层 |阅读模式


代码如下:
  1.         vector<string> vec_str;
  2.         string str = "123#ab##cctry.com#bye";
  3.         int x=0,y=0;
  4.         string sub;
  5.        
  6.         for (string::iterator itor=str.begin();itor!= str.end();++itor)
  7.         {
  8.                
  9.                 y = str.find("#",x);
  10.                 if (y>0)
  11.                 {
  12.                         sub = str.substr(x, y - x);  //返回子串  从0开始到第4个元素之前的字符
  13.                         vec_str.push_back(sub);
  14.                         x = y + 1;        //x=3+1=4
  15.                        
  16.                 }

  17.         }
  18.        
  19.         //输出剩下的字符串
  20.    sub=str.substr(x);
  21.    vec_str.push_back(sub);

  22.    for (vector<string>::iterator itor=vec_str.begin();itor!=vec_str.end();++itor)
  23.    {
  24.           
  25.            cout << *itor << endl;
  26.    }
复制代码




恳请各位大师赐教,小生先行谢谢了!




上一篇:VC基础班第7课 父子窗口的数据传递
下一篇:MultiPaneCtrl 有哪位大哥用过?
63_avatar_middle
最佳答案
1 
ico_lz  楼主| 发表于 2019-11-5 17:36:47 | 显示全部楼层
本帖最后由 safeboy 于 2019-11-5 17:43 编辑

从2019.10.14~11.05,20多天的时间,算是把《实用C++》过了一遍,小作业也都做完了 ,给自己点个赞《实用C++》第52课小作业,循环检测有点太笨了,要如何优化?

想挑战一些有趣的小游戏或者实用的小工具啥的,不知道各位大师有什么建议没有?

评分

参与人数 1驿站币 +2 热心值 +2 收起 理由
58_avatar_small thzzl + 2 + 2 赞一个!

查看全部评分

78_avatar_middle
最佳答案
1 
在线会员 发表于 2019-11-5 17:49:57 | 显示全部楼层
本帖最后由 muye12921 于 2019-11-5 18:06 编辑

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

  4. using namespace std;

  5. int main(void)
  6. {
  7.     string origin_str = "123#ab##cctry.com#";
  8.     vector<string> res_vec;
  9.     int ipos = 0, epos = 0;

  10.     // 按照#进行分割,并存入vector中
  11.     while ((epos = origin_str.find('#', ipos)) != -1) {
  12.         string str = origin_str.substr(ipos, epos - ipos);
  13.         if (str != "") {
  14.             res_vec.push_back(str);
  15.         }
  16.         ipos = epos + 1;
  17.     }

  18.     // 在一行打印结果
  19.     for (int i = 0; i < res_vec.size(); ++i) {
  20.         if (0 == i) {
  21.             cout << res_vec[i];
  22.         } else {
  23.             cout << ", " << res_vec[i];
  24.         }
  25.     }
  26.    
  27.     cout << endl;
  28.    

  29.     getchar();
  30.     return 0;
  31. }
复制代码

这是之前做的,关键代码就是那个while循环
58_avatar_middle
最佳答案
43 
online_vip 发表于 2019-11-5 20:38:27 | 显示全部楼层
safeboy 发表于 2019-11-5 17:36
从2019.10.14~11.05,20多天的时间,算是把《实用C++》过了一遍,小作业也都做完了 ,给自己点个赞{:4_105: ...

按顺序学习:https://www.bilibili.com/video/av46038943 Windows程序设计。
42_avatar_middle
最佳答案
0 
在线会员 发表于 2020-2-28 14:41:24 | 显示全部楼层
看完视频刚写的,没优化,
  1. #include<string>
  2. #include<iostream>
  3. #include<vector>
  4. using namespace std;
  5. int main()
  6. {
  7.         string str7("##123#ab###cctry.com##");
  8.         vector<string> vec;
  9.         int pos1 = 0, pos2;
  10.         while (str7[pos1] == '#'&&pos1<str7.size()) pos1++;
  11.         for ( pos2 = pos1;
  12.                 pos2 < str7.size()&& pos1 + 1<str7.size(); pos2++)
  13.         {
  14.                 pos2 = str7.find('#', pos1 + 1);
  15.                 vec.push_back(str7.substr(pos1, pos2 - pos1));
  16.                 pos1 = pos2 + 1;
  17.                 while (str7[pos1] == '#'&&pos1 < str7.size()) pos1++;
  18.         }
  19.         for (vector<string>::iterator itor = vec.begin(); itor != vec.end(); itor++)
  20.         {
  21.                 cout << *itor << endl;
  22.         }
  23.         return 0;

  24. }
复制代码
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2020-10-26 23:00

Powered by CcTry.CoM

© 2009-2020 cctry.com

快速回复 返回顶部 返回列表