很多其他语言的libary都会有去除string类的首尾空格的库函数,但是标准C++的库却不提供这个功能。但是C++string也提供很强大的功能,实现trim这种功能也不难。下面是几种方法:

1.使用string的find_first_not_of,和find_last_not_of方法

  1. /*
  2. Filename : StringTrim1.cpp
  3. Compiler : Visual C++ 8.0
  4. Description : Demo how to trim string by find_first_not_of & find_last_not_of
  5. Release : 11/17/2006
  6. */
  7. #include <iostream>
  8. #include <string>
  9. std::string& trim(std::string &);
  10. int main()
  11. {
  12. std::string s = " Hello World!! ";
  13. std::cout << s << " size:" << s.size() << std::endl;
  14. std::cout << trim(s) << " size:" << trim(s).size() << std::endl;
  15. return 0;
  16. }
  17. std::string& trim(std::string &s)
  18. {
  19. if (s.empty())
  20. {
  21. return s;
  22. }
  23. s.erase(0,s.find_first_not_of(" "));
  24. s.erase(s.find_last_not_of(" ") + 1);
  25. return s;
  26. }

2.使用boost库中的trim,boost库对提供很多C++标准库没有但是又非常常用和好用的库函数,例如正则表达式,线程库等等。

  1. /*
  2. Filename : boostStringTrim.cpp
  3. Compiler : Visual C++ 8.0 / ISO C++ (boost)
  4. Description : Demo how to boost to trim string
  5. Release : 02/22/2007 1.0
  6. */
  7. #include <iostream>
  8. #include <string>
  9. #include <boost/algorithm/string.hpp>
  10. using namespace std;
  11. using namespace boost;
  12. int main() {
  13. string s = " hello boost!! ";
  14. trim(s);
  15. cout << s << endl;
  16. }

3.使用template(我用GCC编译不通过,用VS2005却可以)

  1. /*
  2. Filename : stringTrim1.cpp
  3. Compiler : Visual C++ 8.0
  4. Description : Demo how to trim string by other method.
  5. Release : 11/18/2006
  6. */
  7. #include <string>
  8. #include <iostream>
  9. #include <cwctype>
  10. template <class T>
  11. std::basic_string<T>& trim(std::basic_string<T>&);
  12. int main( )
  13. {
  14. std::string s = " Hello World!! ";
  15. std::cout << s << " size:" << s.size() << std::endl;
  16. std::cout << trim(s) << " size:" << trim(s).size() << std::endl;
  17. return 0;
  18. }
  19. template <class T>
  20. std::basic_string<T>& trim(std::basic_string<T>& s)
  21. {
  22. if (s.empty()) {
  23. return s;
  24. }
  25. std::basic_string<T>::iterator c;
  26. // Erase whitespace before the string
  27. for (c = s.begin(); c != s.end() && iswspace(*c++);); s.erase(s.begin(), --c);
  28. // Erase whitespace after the string
  29. for (c = s.end(); c != s.begin() && iswspace(*--c);); s.erase(++c, s.end());
  30. return s;
  31. }

split方法

  1. //注意:当字符串为空时,也会返回一个空字符串
  2. void split(std::string& s, std::string& delim,std::vector< std::string >* ret)
  3. {
  4. size_t last = 0;
  5. size_t index=s.find_first_of(delim,last);
  6. while (index!=std::string::npos)
  7. {
  8. ret->push_back(s.substr(last,index-last));
  9. last=index+1;
  10. index=s.find_first_of(delim,last);
  11. }

[转]C++ string的trim, split方法的更多相关文章

  1. String类的split方法以及StringTokenizer

    split方法可以根据指定的表达式regex将一个字符串分割成一个子字符串数组. 它的参数有两种形式,也即:split(String regex)和split(String regex, int li ...

  2. java中String对象的split方法

    在java.lang包中有String.split()方法,返回是一个String[]数组,今天碰到一个自己没注意的问题: 1.特殊分隔符 String str1 = "123|456|78 ...

  3. java基础---->String中的split方法的原理

    这里面主要介绍一下关于String类中的split方法的使用以及原理. split函数的说明 split函数java docs的说明: When there is a positive-width m ...

  4. 【Java面试题】17 如何把一个逗号分隔的字符串转换为数组? 关于String类中split方法的使用,超级详细!!!

    split 方法:将一个字符串分割为子字符串,然后将结果作为字符串数组返回. stringObj.split([separator],[limit])参数:stringObj   必选项.要被分解的 ...

  5. JAVA中string类的split方法

    split([separator,[limit]])第一个参数为分隔符,可以是一个正则表达式,第二个参数为返回结果数组的长度

  6. String.split()方法你可能不知道的一面

    一.问题 java中String的split()是我们经常使用的方法,用来按照特定字符分割字符串,那么我们看以下一段代码: public void splitTest() { String str = ...

  7. String的split方法,你真的懂吗

    String的split方法相信大家都不陌生,或多或少都用过它将字符串转成一个数组,但是就是这样一个简单的方法,里面也有一个不得不注意.不深不浅的小坑. 本地测试代码如下图所示: 图1 大家会发现sp ...

  8. 自己实现String.prototype.trim方法

    今天呢 知乎看到一道题 说是网易面试题,要求自己写一个trim()方法, 实现 var str = "   a   sd  "; 去掉字符串两端的空格. 直接上码 var str ...

  9. C# String.split()用法小结。String.Split 方法 (String[], StringSplitOptions)

    split()首先是一个分隔符,它会把字符串按照split(' 字符')里的字符把字符串分割成数组,然后存给一个数组对象. 输出数组对象经常使用foreach或者for循环. 第一种方法 string ...

随机推荐

  1. 记录sqoop同步失败问题解决过程,过程真的是很崎岖。(1月6日解决)

    记录sqoop同步失败问题解决过程,过程真的是很崎岖.事发原因:最近突然出现sqoop export to mysql时频繁出错.看了下日志是卡在某条数据过不去了,看异常.看sqoop生成的mr并未发 ...

  2. mysql一次插入多条数据

    mysql一次插入多条数据: INSERT INTO hk_test(username, passwd) VALUES ('qmf2', 'qmf2'),('qmf3', 'qmf3'),('qmf4 ...

  3. H5开发之Eclipes 编码乱码问题

    1.编码不对 a.对某文件或某工程更改编码: 鼠标移到工程名或文件名,右键->Properties->Resource->Text file enCoding ->更改编码(G ...

  4. Wireshark分析非标准端口号流量

    Wireshark分析非标准端口号流量 2.2.2  分析非标准端口号流量Wireshark分析非标准端口号流量 应用程序运行使用非标准端口号总是网络分析专家最关注的.关注该应用程序是否有意涉及使用非 ...

  5. A jubeat

    Time Limit:1000MS  Memory Limit:65535K 题型: 编程题   语言: 无限制 描述 jubeat是一款由日本KONAMI倾心打造的体感音乐游戏,该作在日韩.香港等地 ...

  6. POJ1135 Domino Effect(SPFA)

    题目大概是,普通骨牌连接两张关键骨牌,一旦一张关键骨牌倒下与其相邻的普通骨牌也倒下,普通骨牌倒下与其相邻的骨牌也倒下.给出所有有普通骨牌相连的两个关键骨牌之间普通骨牌倒下所需时间,问1号关键骨牌开始倒 ...

  7. HDU 4417 (划分树+区间小于k统计)

    题目链接:  http://acm.hdu.edu.cn/showproblem.php?pid=4417 题目大意:给定一个区间,以及一个k值,求该区间内小于等于k值的数的个数.注意区间是从0开始的 ...

  8. 【BZOJ】1019: [SHOI2008]汉诺塔

    http://www.lydsy.com/JudgeOnline/problem.php?id=1019 题意:汉诺塔规则,只不过盘子n<=30,终点在B柱或C柱,每一次移动要遵守规则:1.小的 ...

  9. 【wikioi】1034 家园(最大流+特殊的技巧)

    http://wikioi.com/problem/1034/ 太神了这题. 其实一开始我以为是费用流,但是总感觉不对. 原因是我没看到一句话,特定的时刻到达特定的点!! 也就是说,并不是每艘船每次都 ...

  10. 转载:hdu 动态规划题集

    1.Robberies 连接 :http://acm.hdu.edu.cn/showproblem.php?pid=2955     背包;第一次做的时候把概率当做背包(放大100000倍化为整数): ...