std::string的工具函数 - 用isspace实现trim函数

简介:

在CodeProject上有朋友说我不应该将空白字符限制在" /t/n/r" 以内,应该使用isspace来实现trim函数,以处理Unicode的空白字符。此话在理,所以将trim的三个函数改了一下。(参阅上一篇《std::string的工具函数》)

 
  1. string trimLeft(const string& str) {  
  2.     string t = str;  
  3.     for (string::iterator i = t.begin(); i != t.end(); i++) {  
  4.         if (!isspace(*i)) {  
  5.             t.erase(t.begin(), i);  
  6.             break;  
  7.         }  
  8.     }  
  9.     return t;  
  10. }  
  11.  
  12. string trimRight(const string& str) {  
  13.     if (str.begin() == str.end()) {  
  14.         return str;  
  15.     }  
  16.  
  17.     string t = str;  
  18.     for (string::iterator i = t.end() - 1; i != t.begin(); i--) {  
  19.         if (!isspace(*i)) {  
  20.             t.erase(i + 1, t.end());  
  21.             break;  
  22.         }  
  23.     }  
  24.     return t;  
  25. }  
  26.  
  27. string trim(const string& str) {  
  28.     string t = str;  
  29.  
  30.     string::iterator i;  
  31.     for (i = t.begin(); i != t.end(); i++) {  
  32.         if (!isspace(*i)) {  
  33.             t.erase(t.begin(), i);  
  34.             break;  
  35.         }  
  36.     }  
  37.  
  38.     if (i == t.end()) {  
  39.         return t;  
  40.     }  
  41.  
  42.     for (i = t.end() - 1; i != t.begin(); i--) {  
  43.         if (!isspace(*i)) {  
  44.             t.erase(i + 1, t.end());  
  45.             break;  
  46.         }  
  47.     }  
  48.  
  49.     return t;  

原理很浅显,就是把原来用find_first_of和find_first_not_of实现的查找换成循环,自己用isspace来判断。本来想参考一下boost的实现,不过发现它的代码实在有点复杂,所以还是自己用简单的循环来解决了。



本文转自边城__ 51CTO博客,原文链接:http://blog.51cto.com/jamesfancy/843204,如需转载请自行联系原作者

相关文章
|
4月前
|
SQL 索引
在 SQL Server 中使用 STRING_AGG 函数
【8月更文挑战第5天】
1157 2
在 SQL Server 中使用 STRING_AGG 函数
|
4月前
|
编译器 C++ 容器
【C++】String常见函数用法
【C++】String常见函数用法
|
4月前
|
存储 Serverless 数据处理
Python - len(string)函数
通过上述介绍和示例,我们可以清楚地看到,在Python中,`len()`函数是处理字符串以及其他可迭代对象长度的重要工具。它简单、易用,但在实际应用中却非常强大,无论是在基础编程还是在复杂的数据处理中,`len()`函数都扮演着不可或缺的角色。
76 10
|
4月前
|
存储 C++
【C/C++学习笔记】string 类型的输入操作符和 getline 函数分别如何处理空白字符
【C/C++学习笔记】string 类型的输入操作符和 getline 函数分别如何处理空白字符
45 0
|
4月前
|
安全 编译器 C++
【剑指offer】2.2编程语言(p22-p25)——面试题1:string赋值运算函数
【剑指offer】2.2编程语言(p22-p25)——面试题1:string赋值运算函数
|
3月前
|
Java 索引
java基础(13)String类
本文介绍了Java中String类的多种操作方法,包括字符串拼接、获取长度、去除空格、替换、截取、分割、比较和查找字符等。
40 0
java基础(13)String类
|
2月前
|
Java
【编程基础知识】(讲解+示例实战)方法参数的传递机制(值传递及地址传递)以及String类的对象的不可变性
本文深入探讨了Java中方法参数的传递机制,包括值传递和引用传递的区别,以及String类对象的不可变性。通过详细讲解和示例代码,帮助读者理解参数传递的内部原理,并掌握在实际编程中正确处理参数传递的方法。关键词:Java, 方法参数传递, 值传递, 引用传递, String不可变性。
62 1
【编程基础知识】(讲解+示例实战)方法参数的传递机制(值传递及地址传递)以及String类的对象的不可变性
|
2月前
|
安全 Java 测试技术
Java零基础-StringBuffer 类详解
【10月更文挑战第9天】Java零基础教学篇,手把手实践教学!
38 2
|
3月前
|
安全 Java
String类-知识回顾①
这篇文章回顾了Java中String类的相关知识点,包括`==`操作符和`equals()`方法的区别、String类对象的不可变性及其好处、String常量池的概念,以及String对象的加法操作。文章通过代码示例详细解释了这些概念,并探讨了使用String常量池时的一些行为。
String类-知识回顾①
|
2月前
|
存储 安全 C++
【C++打怪之路Lv8】-- string类
【C++打怪之路Lv8】-- string类
23 1