免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: cc007cc
打印 上一主题 下一主题

C++ 中怎么实现高效的string的split函数? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2008-09-22 15:47 |只看该作者
原帖由 happy_fish100 于 2008-9-22 11:32 发表
如果性能要求很高,建议用C写。

  a joke

一直不相信 C 比 C++ 更高效的传言,还是用事实说话更有说服力吧

[ 本帖最后由 redspider 于 2008-9-22 16:00 编辑 ]

论坛徽章:
0
12 [报告]
发表于 2008-09-22 15:52 |只看该作者
原帖由 cc007cc 于 2008-9-22 11:23 发表
问题是这样的
一个string text="aa aa bbc cccd"根据分隔符(默认是空格)讲其中的一个个字串提出来放到vector中
暂时是这么做的(见下面代码),当要处理的string很多,较长时要保证程序的效率,大家有什麽 ...


多少数据?我想测一下 stringstream 的效率

  sorry,我脑子秀逗了,自己找数据测一下不就OK了么

[ 本帖最后由 redspider 于 2008-9-22 16:04 编辑 ]

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
13 [报告]
发表于 2008-09-22 16:18 |只看该作者
原帖由 converse 于 2008-9-22 14:56 发表
谢谢你用测试结果为C++正名,挺烦这种所谓的效率问题没有找到症结所在就说什么用C做的说法.


你的方法也不是最优的,可以进一步把substr完全都去掉

论坛徽章:
0
14 [报告]
发表于 2008-09-22 16:22 |只看该作者

回复 #13 hellioncu 的帖子

还请指教如何去掉?

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
15 [报告]
发表于 2008-09-22 16:31 |只看该作者
原帖由 converse 于 2008-9-22 16:22 发表
还请指教如何去掉?


实现上有些差异,不过我想应该能满足楼主的要求的。

保存一份原始字符串
遍历字符串
如果是分割符替换成'\0',保存该部分的起始指针到vector

论坛徽章:
0
16 [报告]
发表于 2008-09-22 17:33 |只看该作者

回复 #15 hellioncu 的帖子

我觉得你这个做法可能不太符合题目的要求.假如string在之后销毁了, 那么保存在vector内的指针就没有效果了吧?我想题目要求的应该是保存的字符串的实体值而不是指针吧?

[ 本帖最后由 converse 于 2008-9-22 17:35 编辑 ]

论坛徽章:
0
17 [报告]
发表于 2008-09-22 23:22 |只看该作者
似乎我这个方法效率也很高哦,而且更容易理解
std::string line;
std::string w;
std::ifstream infile("try.txt");

while (getline(infile, line)) {
    std::istringstream words(line);
    while (words>>w) { /* do something */ }
}

infile.close();

论坛徽章:
0
18 [报告]
发表于 2008-09-23 08:59 |只看该作者
你们这个算法效率高呢?还是strtok效率高呢?

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
19 [报告]
发表于 2008-09-23 09:04 |只看该作者
原帖由 converse 于 2008-9-22 17:33 发表
我觉得你这个做法可能不太符合题目的要求.假如string在之后销毁了, 那么保存在vector内的指针就没有效果了吧?我想题目要求的应该是保存的字符串的实体值而不是指针吧?



原始的string当然是不能销毁的,我不是说“保存一份原始字符串”么。

论坛徽章:
0
20 [报告]
发表于 2008-09-23 09:12 |只看该作者
原帖由 mzli 于 2008-9-23 08:59 发表
你们这个算法效率高呢?还是strtok效率高呢?

感觉用 char* 形式的字符串有点小矬,不喜欢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP