C++中的find,substr和getline功能详解

C++中处理split的函数,首先要了解几个函数

C++中string自己带的find_first_of 或者find_first_not_of

find_last_of 或者find_last_not_of

函数原型为:可以用来超找字符串,char,char *三种类型

string (1)
size_t find_first_of (const string& str, size_t pos = 0) const;
c-string (2)
size_t find_first_of (const char* s, size_t pos = 0) const;
buffer (3)
size_t find_first_of (const char* s, size_t pos, size_t n) const;
character (4)
size_t find_first_of (char c, size_t pos = 0) const;

其次string中的substr函数,根据上述得到的位置,然后调用substr函数可以截取到制定区间内的字符串,如果len未指定,则直接到尾部;

string substr (size_t pos = 0, size_t len = npos) const;

用find和substr可以实现getline的分词功能,以前只以为是读字符串,该功能可以按照指定的分隔符进行读取字符串流;
istream& getline (istream& is, string& str, char delim)
istream& getline (istream& is, string& str);

实现parse url:

代码:url 为 http://www.baidu.com:80/query?k1=v1&k2=v2
  1. void parseUrl(string &url) {
  2. stringstream ss(url); // sstream头文件
  3. string field;
  4. while(getline(ss,field,‘:‘)) {
  5. res.push_back(field);
  6. cout<<field<<endl;
  7. }
  8. string host = res[1];
  9. int pos = host.find_first_not_of(‘/‘);
  10. host = host.substr(pos,host.size()-pos);
  11. cout<<host<<endl;
  12. string port = res[2];
  13. pos = port.find_first_of(‘/‘);
  14. port = port.substr(0,pos);
  15. cout<<port<<endl;
  16. string query = res[2].substr(pos+1);
  17. pos = query.find_first_of(‘?‘);
  18. string nquery = query.substr(0,pos);
  19. cout<<nquery<<endl;
  20. string params = query.substr(pos+1);
  21. cout<<params<<endl;
  22. stringstream parass(params);
  23. while(getline(parass,field,‘&‘)) {
  24. pos = field.find_first_of(‘=‘);
  25. string key = field.substr(0,pos);
  26. string val = field.substr(pos+1);
  27. cout<<"key = "<<key<<" val = "<< val<<endl;
  28. }
  29. }
顺便提一下,C语言中也有类似的功能:如strtok和strtok_r

函数原型分别为:

char *strtok(char *s, char *delim);

char *strtok_r(char *str, const char *delim, char **saveptr);  线程安全版

				
时间: 2024-11-16 17:40:18

C++中的find,substr和getline功能详解的相关文章

arcgis中Create Features From Text File功能详解

1.Create Features From Text File工具介绍 Create Features From Text File工具是arcgis->arctoolbox工具箱中的工具,用于文本数据(txt格式数据)转成shapefile格式. 版本要求:arcgis9.2.arcgis9.3版本软件自带该工具.从10.0及以后,安装软件后不带改工具,其中10.0-10.2版本该工具实际上还在安装路劲下,但是10.3以后版本就没有该工具箱,可以从旧版本拷贝到新版本中使用. 2.Create

转:UIViewController中各方法调用顺序及功能详解

UIViewController中loadView, viewDidLoad, viewWillUnload, viewDidUnload, viewWillAppear, viewDidAppear, viewWillLayoutSubviews,viewDidLayoutSubviews,viewWillDisappear, viewDidDisappear方法,按照调用顺序说明如下: 调试日志: 1 2 3 4 5 6 7 8 9 2013-07-14 12:15:49.048 VCTes

UIViewController中各方法调用顺序及功能详解

UIViewController中loadView, viewDidLoad, viewWillUnload, viewDidUnload, viewWillAppear, viewDidAppear, viewWillLayoutSubviews,viewDidLayoutSubviews,viewWillDisappear, viewDidDisappear方法,按照调用顺序说明如下: 调试日志: 1 2 3 4 5 6 7 8 9 2013-07-14 12:15:49.048 VCTes

(转)UIViewController中各方法调用顺序及功能详解

目录(?)[-] 1 initWithNibNamebundle 2 loadView 3 viewDidLoad 4 viewWillAppear 5 viewDidAppear 6 viewWillLayoutSubviews 7 viewDidLayoutSubviews 8 viewWillDisappear 9 viewDidDisappear 10 viewWillUnload 11 viewDidUnload UIViewController中loadView, viewDidLo

Dynamics CRM2013 1:N关系 sub-grid中的“添加现有项”和“添加新建项”功能详解

CRM2013中sub-grid的样式和2011中有了较大的变化,2013和2011界面对比如下 在2011的时候按钮是在ribbon区,1:N的父子关系实体直接点击添加新纪录就可以,但2013就不行了点加号首先会有个下拉框把现有的子实体数据列出来,你可以选择现有的也可以新建 既然你的关系实体是1:N的父子实体,那子的存在肯定是依赖于与父实体的,所以这个地方就压根不存在关联现有实体一旦关联就会报错,所以纯碎新建的话这边的步骤就繁琐了,同时也会给用户带来迷惑 所以这个地方这种情况下完全没必要添加现

在ASP.NET 5应用程序中的跨域请求功能详解

在ASP.NET 5应用程序中的跨域请求功能详解 浏览器安全阻止了一个网页中向另外一个域提交请求,这个限制叫做同域策咯(same-origin policy),这组织了一个恶意网站从另外一个网站读取敏感数据,但是一些特殊情况下,你需要允许另外一个站点跨域请求你的网站. 跨域资源共享(CORS:Cross Origin Resources Sharing)是一个W3C标准,它允许服务器放宽对同域策咯的限制,使用CORS,服务器可以明确的允许一些跨域的请求,并且拒绝其它的请求.CORS要比JSONP

zabbix专题:第九章 zabbix自动发现功能详解

zabbix自动发现功能详解 对Linux有兴趣的朋友加入QQ群:476794643 在线交流 本文防盗链:http://zhang789.blog.51cto.co zabbix自动发现功能详解 网络发现简介 有100台服务器,不想一台台主机去添加,能不能让zabbix自动添加主机呢,当然可以,网络发现便是这个功能,当然前提条件是所有服务器都已经安装了agent或者snmp(其实也可以不用,鉴于我们大部分功能都用agent,所以请安装上agent),server扫描配置好的ip段,自动添加ho

PHP5.2至5.6的新增功能详解

截至目前(2014.2), PHP 的最新稳定版本是 PHP5.5, 但有差不多一半的用户仍在使用已经不在维护 [注] 的 PHP5.2, 其余的一半用户在使用 PHP5.3 [注].因为 PHP 那"集百家之长"的蛋疼语法,加上社区氛围不好,很多人对新版本,新特征并无兴趣.本文将会介绍自 PHP5.2 起,直至 PHP5.6 中增加的新特征. PHP5.2 以前:autoload, PDO 和 MySQLi, 类型约束 PHP5.2:JSON 支持 PHP5.3:弃用的功能,匿名函数

jmeter 基础功能详解

jmeter 基础功能详解 thread group:包含一组线程,每个线程独立地执行测试计划. sampler:采样器,有多种不同的sample实现,用来发起各种请求,如http请求,jdbc请求,javaTest请求等等. logic controller:逻辑控制器有多种不同的实现,可以决定每个sample的执行顺序. listener:有多种不同的实现,主要用于统计测试接话运行中的数据并展示,如可以进行图形化方式展示响应时间. timer:定时器,有多种不同的实现,可用作每个请求见的停顿