如何将字符串前后的空白去除(C/C++) (STL)
Abstract
在(原創) 如何将字符串前后的空白去除? (使用string.find_first_not_of, string.find_last_not_of) (C/C++) (STL) 中已经可顺利将字符串前后的空白去除,且程序相当的精简,在此用另外一种方式达到此要求,且可同时将whitespace去除,并且使用template写法。
Introduction
原來版本的程式在VC8可執行,但無法在Dev-C++執行,目前已經修正。
stringTrim1.cpp / C++
2 (C) OOMusou 2006 http://oomusou.cnblogs.com
3
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行
for (c = s.begin(); c != s.end() && iswspace(*c++););
s.erase(s.begin(), --c);
是将字符串前的whitespace删除。
26和27行
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)相关推荐
- (原創) 如何将字符串前后的空白去除? (使用string.find_first_not_of, string.find_last_not_of) (C/C++)...
这在字符串处理是很常用的功能,.NET Framework的String class直接提供Trim()的method,其它语言也大都有提供(VB.VFP),但C++无论Standard Librar ...
- C++primer第五版 编写一段程序,读入一个包含标点符号的字符串,将标点符号去除后输出字符串剩余的部分
这是一个关于字符串处理的简单程序,但是里面有一些细节是值得关注的.先附上程序: // primer_3_2_3.cpp : Defines the entry point for the applic ...
- python去掉两边空格_Python模拟删除字符串两边的空白
目标: 1.使用string模块的whitespace 2.删除左边.右边以及两边的空白 代码如下: [root@localhost python]# cat rmspace.py #!/usr/bi ...
- 使用stl::string去除字符串前后的空白
erase函数的原型如下: (1)string& erase ( size_t pos = 0, size_t n = npos ); (2)iterator erase ( iterator ...
- java字符串去重复_java去除字符串中重复、不重复、消除重复后字符
java去除字符串中重复.不重复.消除重复后字符 import java.util.HashSet; import java.util.Set; public class Main { public ...
- Python模拟删除字符串两边的空白
目标: 1.使用string模块的whitespace 2.删除左边.右边以及两边的空白 代码如下: [root@localhost python]# cat rmspace.py #!/usr/bi ...
- python 字符串去空格_Python去除、替换字符串空格的处理方法
个人想到的解决方法有两种,一种是 .replace(' old ',' new ') 第一个参数是需要换掉的内容比如空格,第二个是替换成的内容,可以把字符串中的空格全部替换掉. 第二种方法是像这样 s ...
- 去掉字符串首尾逗号_去除字符串首尾空格和特殊字符
去除字符串首尾空格和特殊字符 用户在输入数据时,经常会在无意中输入多余的空格,在有些情况下,字符串中不允许出现空格和特殊字符,此时就需要去除字符串中的空格和特殊字符.在PHP中提供了trim()函数去 ...
- java字符串去掉中文_Java——去除字符串中的中文
import java.util.regex.Matcher; import java.util.regex.Pattern; public class RemoveStrChinese { priv ...
最新文章
- codefores 786B. Legacy(最短路,线段树优化拆点,好题)
- Ant Design 入门-参照官方文档使用组件
- 赠书 | 人工智能识万物:卷积神经网络的前世今生
- java同步队列与阻塞队列
- kinect二次开发_Kinect for Windows SDK开发初体验(二)操作Camera
- 分子生物学-共价键基础
- App移动端性能工具调研
- Feign自定义编程配置
- 网络现代高科技人工智能宣传海报,没有脑洞怎么办,模板拿走
- 【转】通过CountDownLatch提升请求处理速度
- jquery1.6.2源码拆分一
- 【JanusGraph入门】(第一天,下载项目)
- 数据结构课程设计-(三)哈夫曼编码器
- 史上最完整基于Springboot实现进销存管理系统
- python计算单词长度_附加一个计算单词长度的列表
- 发射功率dBm 换算表
- 香蕉树上第一根芭蕉——关于C语言中链表(动态链表静态链表)使用说明
- 小程序中图片太大应该怎么处理
- 联想拯救者15isk清灰_清灰和升级容易 联想拯救者14拆机解析
- 小程序生成二维码海报
热门文章
- 测试一个数是不是素数
- 970计算机技术基础,2017年武汉大学测绘遥感信息工程国家重点实验室970计算机技术基础考研强化模拟题...
- java请求header_java中处理header请求以及跟cookie相关的一些细节
- OVS vswitchd启动(三十八)
- JavaScript中的工厂函数vs构造函数vs class
- mysql集群之MMM简单搭建
- thinkpad t400无线网卡故障恢复技巧
- [UML]UML系列——类图class的关联关系(聚合、组合)
- Linux下SSH 客户端不用输入密码配置步骤
- DOS命令-创建删除文件和文件夹