/***************************************************************************
*
* Copyright (c) 2011 **.com, Inc. All Rights Reserved
*
**************************************************************************/
/**
* @file string_util.hpp
* @author zhujingwei
* @date 2011/07/01 15:33:39
* @brief
*
**/
#include <sstream>
#ifndef __STRING_UTIL_H_
#define __STRING_UTIL_H_
namespace util {
template<typename T>
inline T& left_trim(T &sz) {
typename T::iterator ite = sz.begin();
for(; ite != sz.end(); ++ite) {
if (!isspace(*ite)){
break;
}
}
if (sz.end() == ite) {
sz.clear();
} else {
sz.erase(sz.begin(), ite);
}
return sz;
}
template<typename T>
inline T& right_trim(T &sz) {
typename T::iterator ite = sz.end() - 1;
for (; ;ite--) {
if (!isspace(*ite)) {
sz.erase(ite + 1, sz.end());
break;
}
if (ite == sz.begin()) {
sz.clear();
break;
}
}
return sz;
}
template<typename T>
inline T& trim(T &sz) {
return left_trim(right_trim(sz));
}
template<typename T>
inline bool starts_with(const T &src, const T &subsz) {
return (0 == src.find(subsz));
}
template<typename T>
inline bool ends_with(const T &src, const T &subsz) {
size_t idx = src.rfind(subsz);
return (idx != std::string::npos) && (idx == (src.length() - subsz.length()));
}
template<typename S, typename D>
inline D parse_string(const S &sz) {
D dest;
std::istringstream iss(sz);
iss >> dest;
return dest;
}
template<typename D>
inline D parse_string(const std::string &sz) {
D dest;
std::istringstream iss(sz);
iss >> dest;
return dest;
}
template<typename S, typename D>
inline D to_string(const S &num) {
std::ostringstream oss;
oss << num;
return oss.str();
}
template<typename S>
inline std::string to_string(const S &num) {
std::ostringstream oss;
oss << num;
return oss.str();
}
}
#endif // __STRING_UTIL_H_
string_util.hpp
最新推荐文章于 2021-06-17 16:22:11 发布