[转]C++ string的trim, split方法
很多其他语言的libary都会有去除string类的首尾空格的库函数,但是标准C++的库却不提供这个功能。但是C++string也提供很强大的功能,实现trim这种功能也不难。下面是几种方法:
1.使用string的find_first_not_of,和find_last_not_of方法
- /*
- Filename : StringTrim1.cpp
- Compiler : Visual C++ 8.0
- Description : Demo how to trim string by find_first_not_of & find_last_not_of
- Release : 11/17/2006
- */
- #include <iostream>
- #include <string>
- std::string& trim(std::string &);
- int main()
- {
- std::string s = " Hello World!! ";
- std::cout << s << " size:" << s.size() << std::endl;
- std::cout << trim(s) << " size:" << trim(s).size() << std::endl;
- return 0;
- }
- std::string& trim(std::string &s)
- {
- if (s.empty())
- {
- return s;
- }
- s.erase(0,s.find_first_not_of(" "));
- s.erase(s.find_last_not_of(" ") + 1);
- return s;
- }
2.使用boost库中的trim,boost库对提供很多C++标准库没有但是又非常常用和好用的库函数,例如正则表达式,线程库等等。
- /*
- Filename : boostStringTrim.cpp
- Compiler : Visual C++ 8.0 / ISO C++ (boost)
- Description : Demo how to boost to trim string
- Release : 02/22/2007 1.0
- */
- #include <iostream>
- #include <string>
- #include <boost/algorithm/string.hpp>
- using namespace std;
- using namespace boost;
- int main() {
- string s = " hello boost!! ";
- trim(s);
- cout << s << endl;
- }
3.使用template(我用GCC编译不通过,用VS2005却可以)
- /*
- Filename : stringTrim1.cpp
- Compiler : Visual C++ 8.0
- Description : Demo how to trim string by other method.
- Release : 11/18/2006
- */
- #include <string>
- #include <iostream>
- #include <cwctype>
- template <class T>
- std::basic_string<T>& trim(std::basic_string<T>&);
- int main( )
- {
- std::string s = " Hello World!! ";
- std::cout << s << " size:" << s.size() << std::endl;
- std::cout << trim(s) << " size:" << trim(s).size() << std::endl;
- return 0;
- }
- template <class T>
- std::basic_string<T>& trim(std::basic_string<T>& s)
- {
- if (s.empty()) {
- return s;
- }
- std::basic_string<T>::iterator c;
- // Erase whitespace before the string
- for (c = s.begin(); c != s.end() && iswspace(*c++);); s.erase(s.begin(), --c);
- // Erase whitespace after the string
- for (c = s.end(); c != s.begin() && iswspace(*--c);); s.erase(++c, s.end());
- return s;
- }
split方法
- //注意:当字符串为空时,也会返回一个空字符串
- void split(std::string& s, std::string& delim,std::vector< std::string >* ret)
- {
- size_t last = 0;
- size_t index=s.find_first_of(delim,last);
- while (index!=std::string::npos)
- {
- ret->push_back(s.substr(last,index-last));
- last=index+1;
- index=s.find_first_of(delim,last);
- }
[转]C++ string的trim, split方法的更多相关文章
- String类的split方法以及StringTokenizer
split方法可以根据指定的表达式regex将一个字符串分割成一个子字符串数组. 它的参数有两种形式,也即:split(String regex)和split(String regex, int li ...
- java中String对象的split方法
在java.lang包中有String.split()方法,返回是一个String[]数组,今天碰到一个自己没注意的问题: 1.特殊分隔符 String str1 = "123|456|78 ...
- java基础---->String中的split方法的原理
这里面主要介绍一下关于String类中的split方法的使用以及原理. split函数的说明 split函数java docs的说明: When there is a positive-width m ...
- 【Java面试题】17 如何把一个逗号分隔的字符串转换为数组? 关于String类中split方法的使用,超级详细!!!
split 方法:将一个字符串分割为子字符串,然后将结果作为字符串数组返回. stringObj.split([separator],[limit])参数:stringObj 必选项.要被分解的 ...
- JAVA中string类的split方法
split([separator,[limit]])第一个参数为分隔符,可以是一个正则表达式,第二个参数为返回结果数组的长度
- String.split()方法你可能不知道的一面
一.问题 java中String的split()是我们经常使用的方法,用来按照特定字符分割字符串,那么我们看以下一段代码: public void splitTest() { String str = ...
- String的split方法,你真的懂吗
String的split方法相信大家都不陌生,或多或少都用过它将字符串转成一个数组,但是就是这样一个简单的方法,里面也有一个不得不注意.不深不浅的小坑. 本地测试代码如下图所示: 图1 大家会发现sp ...
- 自己实现String.prototype.trim方法
今天呢 知乎看到一道题 说是网易面试题,要求自己写一个trim()方法, 实现 var str = " a sd "; 去掉字符串两端的空格. 直接上码 var str ...
- C# String.split()用法小结。String.Split 方法 (String[], StringSplitOptions)
split()首先是一个分隔符,它会把字符串按照split(' 字符')里的字符把字符串分割成数组,然后存给一个数组对象. 输出数组对象经常使用foreach或者for循环. 第一种方法 string ...
随机推荐
- NHibernate初探(1)
1 NHibernate是ORM的一种. 是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术.ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中.本质上 ...
- 安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(三)码农网
12. 安装 Apache Tomcat Tomcat 是由 Apache 设计的用来运行 Java HTTP web 服务器的 servlet 容器.按照下面的方法安装 tomcat,但需要指出的是 ...
- HealthKit开发教程之HealthKit的主要类型数据
HealthKit开发教程之HealthKit的主要类型数据 在HealthKit中,我们将最常用到的数据称之为主要数据.主要数据基本上有三种:长度类型的数据.质量类型的数据.能量类型的数据.本节将主 ...
- .NET 4.0中的泛型的协变和逆变
转自:http://www.cnblogs.com/jingzhongliumei/archive/2012/07/02/2573149.html 先做点准备工作,定义两个类:Animal类和其子类D ...
- BZOJ3748 : [POI2015]Kwadraty
打表可得结论: 1.只有2,3,6,7,8,11,12,15,18,19,...,108,112,128这31个数的k值是无穷大 2.当n足够大的时候,即当n>506时,设$f(x)=1^2+2 ...
- 【转】Eclipse Plugin 在 Console上打印出message
org.eclipse.ui.console 转自:http://blog.csdn.net/rujielaisusan/article/details/4505188 首先这里主要用到的是org.e ...
- css3 flex流动自适应响应式布局样式类
1.再说css3 flex 一旦一个容器赋予了display:flex属性,将会有以下特点: 项目无法设置浮动. 列表的样式会被清除. 无法使用vertical-align设置垂直对齐方式. 目前互联 ...
- 【BZOJ】1067: [SCOI2007]降雨量(rmq+变态题)
http://www.lydsy.com/JudgeOnline/problem.php?id=1067 好不爽,弄了一个晚上. 好不爽. 还是照着别人程序拍着看的!!! 噗 这题很变态. 首先,我没 ...
- 3.22学习理解httpContext与where 1=1
1.HttpContextHttpContext.Current.Session.RemoveAll();从会话状态集合中移除所有的键和值.(未过期,还存在)HttpContext.Current.S ...
- jsp中如何取得当前页面完整的URL
JSP页面 <% String url = request.getScheme()+"://"+ request.getServerName()+request.getReq ...