Abstract
在(原創) 如何将字符串前后的空白去除? (使用string.find_first_not_of, string.find_last_not_of) (C/C++) (STL) 中已经可顺利将字符串前后的空白去除,且程序相当的精简,在此用另外一种方式达到此要求,且可同时将whitespace去除,并且使用template写法。

Introduction
原來版本的程式在VC8可執行,但無法在Dev-C++執行,目前已經修正。

stringTrim1.cpp / C++

1 /* 
2 (C) OOMusou 2006 http://oomusou.cnblogs.com

4 Filename    : StringTrim1.cpp
5 Compiler    : Visual C++ 8.0 / Dev-C++ 4.9.9.2
6 Description : Demo how to trim string by find_first_not_of & find_last_not_of
7 Release     : 07/15/2008
8 */
9 #include <string>
10 #include <iostream>
11 #include <cwctype>
12 
13 using namespace std;
14 
15 string& trim(string& s) {
16   if (s.empty()) {
17     return s;
18   }
19  
20   string::iterator c;
21   // Erase whitespace before the string
22   for (c = s.begin(); c != s.end() && iswspace(*c++););
23     s.erase(s.begin(), --c);
24 
25   // Erase whitespace after the string
26   for (c = s.end(); c != s.begin() && iswspace(*--c););
27     s.erase(++c, s.end());
28 
29   return s;
30 }
31 
32 int main( ) {
33   string s = "   Hello World!!   ";
34   cout << s << " size:" << s.size() << endl;
35   cout << trim(s) << " size:" << trim(s).size() << endl;
36 }

22和23行

// Erase whitespace before the string
for (c = s.begin(); c != s.end() && iswspace(*c++););
  s.erase(s.begin(), --c);

是将字符串前的whitespace删除。

26和27行

// Erase whitespace after the string
for (c = s.end(); c != s.begin() && iswspace(*--c););
  s.erase(++c, s.end());

是将字符串后的whitespace删除。

22行是一种变形的for写法,for的expr3区没写,并将increment写在expr2区,for从s.begin()开始,若未到s.end()尾端且是whitespace的话就继续,并且判断完whitespace就+1,其实整个for loop就相当于string.find_first_not_of(),要找到第一个不是whitespace的位置。

23行从s.begin()开始删除whitespace,但为什么要删到--c呢?因为32行的for loop,在跳离for loop之前,已经先+1,所以在此要-1才会正确。

26和27行同理,只是它是从字符串尾巴考虑。

我承认这段程序不是很好懂,是充满了C style的写法,不过++,--这种写法本来就是C的光荣、C的特色,既然C++强调多典,又是继承C语言,所以C++程序员还是得熟析这种写法。

转载于:https://www.cnblogs.com/lzjsky/archive/2010/10/26/1861807.html

如何将字符串前后的空白去除(C/C++) (STL)相关推荐

  1. (原創) 如何将字符串前后的空白去除? (使用string.find_first_not_of, string.find_last_not_of) (C/C++)...

    这在字符串处理是很常用的功能,.NET Framework的String class直接提供Trim()的method,其它语言也大都有提供(VB.VFP),但C++无论Standard Librar ...

  2. C++primer第五版 编写一段程序,读入一个包含标点符号的字符串,将标点符号去除后输出字符串剩余的部分

    这是一个关于字符串处理的简单程序,但是里面有一些细节是值得关注的.先附上程序: // primer_3_2_3.cpp : Defines the entry point for the applic ...

  3. python去掉两边空格_Python模拟删除字符串两边的空白

    目标: 1.使用string模块的whitespace 2.删除左边.右边以及两边的空白 代码如下: [root@localhost python]# cat rmspace.py #!/usr/bi ...

  4. 使用stl::string去除字符串前后的空白

    erase函数的原型如下: (1)string& erase ( size_t pos = 0, size_t n = npos ); (2)iterator erase ( iterator ...

  5. java字符串去重复_java去除字符串中重复、不重复、消除重复后字符

    java去除字符串中重复.不重复.消除重复后字符 import java.util.HashSet; import java.util.Set; public class Main { public ...

  6. Python模拟删除字符串两边的空白

    目标: 1.使用string模块的whitespace 2.删除左边.右边以及两边的空白 代码如下: [root@localhost python]# cat rmspace.py #!/usr/bi ...

  7. python 字符串去空格_Python去除、替换字符串空格的处理方法

    个人想到的解决方法有两种,一种是 .replace(' old ',' new ') 第一个参数是需要换掉的内容比如空格,第二个是替换成的内容,可以把字符串中的空格全部替换掉. 第二种方法是像这样 s ...

  8. 去掉字符串首尾逗号_去除字符串首尾空格和特殊字符

    去除字符串首尾空格和特殊字符 用户在输入数据时,经常会在无意中输入多余的空格,在有些情况下,字符串中不允许出现空格和特殊字符,此时就需要去除字符串中的空格和特殊字符.在PHP中提供了trim()函数去 ...

  9. java字符串去掉中文_Java——去除字符串中的中文

    import java.util.regex.Matcher; import java.util.regex.Pattern; public class RemoveStrChinese { priv ...

最新文章

  1. codefores 786B. Legacy(最短路,线段树优化拆点,好题)
  2. Ant Design 入门-参照官方文档使用组件
  3. 赠书 | 人工智能识万物:卷积神经网络的前世今生
  4. java同步队列与阻塞队列
  5. kinect二次开发_Kinect for Windows SDK开发初体验(二)操作Camera
  6. 分子生物学-共价键基础
  7. App移动端性能工具调研
  8. Feign自定义编程配置
  9. 网络现代高科技人工智能宣传海报,没有脑洞怎么办,模板拿走
  10. 【转】通过CountDownLatch提升请求处理速度
  11. jquery1.6.2源码拆分一
  12. 【JanusGraph入门】(第一天,下载项目)
  13. 数据结构课程设计-(三)哈夫曼编码器
  14. 史上最完整基于Springboot实现进销存管理系统
  15. python计算单词长度_附加一个计算单词长度的列表
  16. 发射功率dBm 换算表
  17. 香蕉树上第一根芭蕉——关于C语言中链表(动态链表静态链表)使用说明
  18. 小程序中图片太大应该怎么处理
  19. 联想拯救者15isk清灰_清灰和升级容易 联想拯救者14拆机解析
  20. 小程序生成二维码海报

热门文章

  1. 测试一个数是不是素数
  2. 970计算机技术基础,2017年武汉大学测绘遥感信息工程国家重点实验室970计算机技术基础考研强化模拟题...
  3. java请求header_java中处理header请求以及跟cookie相关的一些细节
  4. OVS vswitchd启动(三十八)
  5. JavaScript中的工厂函数vs构造函数vs class
  6. mysql集群之MMM简单搭建
  7. thinkpad t400无线网卡故障恢复技巧
  8. [UML]UML系列——类图class的关联关系(聚合、组合)
  9. Linux下SSH 客户端不用输入密码配置步骤
  10. DOS命令-创建删除文件和文件夹