头文件:BoostTrim.h
#pragma once #include <string> using namespace std; //此名称空间的函数说明 //trim:删除字符串两端的空白符 //trim_copy:返回字符串删除两端空白符之后的新字符串,不改变原字符串 //trim_copy_if:返回字符串删除两端符合条件判断的字符,返回删除之后的新字符串,不改变原来字符串 //right:只删除右端的 //left:只删除左端的 namespace BoostTrim { //判断一个char是否为空白符 inline bool is_space( char t ) { return ( t==char(9) /*HT*/ || t==char(10) || t==char(11) || t==char(13) || t==char(32)/*space*/ ); } template<typename Fun> inline void trim_left_if(string& Input, Fun is_space) { for (string::iterator i=Input.begin(); i!=Input.end();) { if (is_space(*i)) { i=Input.erase(i); continue; } else { break; } } } template<typename Fun> inline string trim_left_copy_if(const string& Input, Fun is_space ) { string str; for (string::const_iterator i=Input.begin(); i!=Input.cend();) { if (is_space(*i)) { ++i; } else { return string(i,Input.cend()); } } return string(); } inline string trim_left_copy(const string& Input) { return trim_left_copy_if(Input,is_space); } inline void trim_left(string& Input) { trim_left_if(Input,is_space); } template<typename Fun> inline void trim_right_if(string& Input, Fun is_space) { size_t i = Input.size()-1; for (; i!= -1; --i) { if (is_space(Input[i])) { continue; } else { break; } } Input.erase(i+1); } template<typename Fun> inline string trim_right_copy_if(const string& Input, Fun is_space ) { size_t i = Input.size()-1; for (; i!= -1; --i) { if (is_space(Input[i])) { continue; } else { break; } } string result1; for (;i!=-1;--i) { result1.push_back(Input[i]); } return result1; } inline string trim_right_copy(const string& Input) { trim_right_copy_if(Input,is_space); } inline void trim_right(string& Input) { trim_right_if(Input,is_space); } template<typename Fun> inline void trim_if(string& Input, Fun is_space) { trim_left_if(Input,is_space); trim_right_if(Input,is_space); } inline void trim(string& str) { trim_left(str); trim_right(str); } template<typename Fun> inline string trim_copy_if(const string& Input, Fun is_space) { return trim_right_copy_if(trim_left_copy_if(Input,is_space),is_space); } inline string trim_copy(const string& Input) { return trim_copy_if(Input,is_space); } }
测试文件:main.cpp
#include <iostream> #include "BoostTrim.h" //输出一个对象,两边加“|”用来标明字符串的两端 template<typename T> void p(const T& s) { cout<<"|"<<s<<"|"<<endl; } //判断一个字符是否为“*”,用来测试函数对象 bool is_star(char c) { return (c=='*'); } //测试程序 int main() { string s=" \t \n sdj***falkdf kd f*s * \n \t \r "; p(s); //BoostTrim::trim_left_if(s,BoostTrim::is_space); //BoostTrim::trim_left_if(s,is_star); //BoostTrim::trim_left(s); //BoostTrim::trim_right_if(s,BoostTrim::is_space); //BoostTrim::trim_right_if(s,is_star); //BoostTrim::trim_right(s); //BoostTrim::trim(s); //BoostTrim::trim_if(s,BoostTrim::is_space); //BoostTrim::trim_if(s,is_star); //string s1=trim_left_copy_if(s,BoostTrim::is_space); //string s1=trim_left_copy(s); //string s1=trim_right_copy_if(s,BoostTrim::is_space); //string s1=trim_right_copy(s); //string s1=trim_copy_if(s,BoostTrim::is_space); string s1=trim_copy(s); p(s1); }
作者:ClamReason 发表于2013-11-29 1:00:49 原文链接
阅读:109 评论:0 查看评论