免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3670 | 回复: 5
打印 上一主题 下一主题

怎么实现用STL读入一个带空格的字符串 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-29 10:52 |只看该作者 |倒序浏览
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <iterator>
  4. #include <vector>
  5. #include <fstream>
  6. #include <string>
  7. using namespace std;
  8. int main(int argc, char *argv[])
  9. { ifstream infile("word.txt",ios::in);
  10.    if(!infile) { cout<<"Unable to open the necessary file"<<endl;
  11.    return -1;
  12.    }
  13.   istream_iterator<string>  is(infile);
  14.   istream_iterator<string> eof;
  15.   vector<string> text;
  16.   copy(is,eof,back_inserter(text));
  17.   sort(text.begin(),text.end());
  18.   ostream_iterator<string> os(cout,"\n");
  19.   copy(text.begin(),text.end(),os);
  20.        
  21.         return 0;
  22. }
复制代码

我的文件的内容是afica bango china databus zoo substring hero goto xeon
结果输出的时候就是忽略空格,那么假如要把空格作为字符串的一部分,怎么实现ne?谢谢

论坛徽章:
0
2 [报告]
发表于 2009-03-29 11:36 |只看该作者
用getline函数可以指定分隔符

论坛徽章:
0
3 [报告]
发表于 2009-03-29 14:06 |只看该作者
原帖由 tyc611 于 2009-3-29 11:36 发表
用getline函数可以指定分隔符

可是我用的是stl,怎么实现呢?我是说在STL的框架下实现

论坛徽章:
0
4 [报告]
发表于 2009-03-29 14:12 |只看该作者
原帖由 sysabod 于 2009-3-29 14:06 发表

可是我用的是stl,怎么实现呢?我是说在STL的框架下实现

要么使用getline定义一个Iterator类,然后继续使用copy
要么自己手写一个循环
此外,我也不知道是否还存在更简单的方法

论坛徽章:
0
5 [报告]
发表于 2009-03-29 17:59 |只看该作者
1. istream::getline()也是stl的一部分,所以使用它也是“在STL的框架下实现”;

2. 如果你非要用copy, 可以定义一个string_helper类,并定义对应的operator>>操作符,然后copy到string_helper类的容器中,然后再transform到string类的容器中;

3. 或者你可以自定义string<_Elem, _Trait>中的模板参数,然后定义basic_istream<_Elem, _Trait>, 然后定义basic_streambuf<_Elem, _Trait>,不过这比第二种方法需要更多的时间,精力和胆量!

论坛徽章:
0
6 [报告]
发表于 2009-03-29 22:19 |只看该作者

回复 #1 sysabod 的帖子

l楼上的两位谢谢了,我刚开始学STL,好多东西都不懂啊,大侠说的暂且记下,加以时日再讨论。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP