C++字符串处理封装类String
概述
C++在处理字符串时相对于python等脚本语言并没有什么优势,下面将常用的字符串处理函数封装成一个String工具类,方便以后使用,后期还会对该类进行扩充,下面是具体的实现:
// String.hpp
#ifndef _STRING_HPP
#define _STRING_HPP
#include <string.h>
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
class String
{
public:
static std::string trimLeft(const std::string& str, const std::string& token = " ")
{
std::string t = str;
t.erase(0, t.find_first_not_of(token));
return t;
}
static std::string trimRight(const std::string& str, const std::string& token = " ")
{
std::string t = str;
t.erase(t.find_last_not_of(token) + 1);
return t;
}
static std::string trim(const std::string& str, const std::string& token = " ")
{
std::string t = str;
t.erase(0, t.find_first_not_of(token));
t.erase(t.find_last_not_of(token) + 1);
return t;
}
static std::string toLower(const std::string& str)
{
std::string t = str;
std::transform(t.begin(), t.end(), t.begin(), tolower);
return t;
}
static std::string toUpper(const std::string& str)
{
std::string t = str;
std::transform(t.begin(), t.end(), t.begin(), toupper);
return t;
}
static bool startsWith(const std::string& str, const std::string& substr)
{
return str.find(substr) == 0;
}
static bool endsWith(const std::string& str, const std::string& substr)
{
return str.rfind(substr) == (str.length() - substr.length());
}
static bool equalsIgnoreCase(const std::string& str1, const std::string& str2)
{
return toLower(str1) == toLower(str2);
}
static std::vector<std::string> split(const std::string& str, const std::string& delimiter)
{
char* save = nullptr;
char* token = strtok_r(const_cast<char*>(str.c_str()), delimiter.c_str(), &save);
std::vector<std::string> result;
while (token != nullptr)
{
result.emplace_back(token);
token = strtok_r(nullptr, delimiter.c_str(), &save);
}
return result;
}
};
#endif
下面是String的具体使用例子:
// main.cpp
#include <iostream>
#include "String.hpp"
int main()
{
std::string str = "Hello world";
std::cout << String::trimLeft(str, "Hello") << std::endl;
std::cout << String::trimRight(str, "world") << std::endl;
str = " nihao ";
std::cout << String::trim(str) << std::endl;
std::cout << String::toUpper(str) << std::endl;
std::cout << String::toLower(String::toUpper(str)) << std::endl;
str = "Hello world";
std::cout << String::startsWith(str, "Hello") << std::endl;
std::cout << String::endsWith(str, "a") << std::endl;
std::vector<std::string> result = String::split(str, " ");
for (auto& iter : result)
{
std::cout << iter << std::endl;
}
return 0;
}
该例子的github地址:https://github.com/chxuan/samples/tree/master/String
C++字符串处理封装类String的更多相关文章
- 字符串的使用(string,StringBuffer,StringBuilder)
String中==与equals的区别:==比较字符串中的引用相等equals比较字符串中的内容相等(因为字符串有重写equals方法) string常用的方法 返回类型 方法 操作功能 Char c ...
- Swift_字符串详解(String)
Swift_字符串详解(String) 类型别名 //类型别名 fileprivate func testTypeAliases() { let index = String.Index.self p ...
- C# 字符串比较大小 string.Compare()方法
string.Compare方法,用来比较2个字符串值得大小 string.Compare(str1, str2, true); 返回值: 1 : str1大于str2 0 : str1等于str2 ...
- C风格字符串和C++ string 对象赋值操作的性能比较
<<C++ Primer>> 第四版 Exercise Section 4.3.1 部分Exercise 4.2.9 习题如下: 在自己本机执行如下程序,记录程序执行时间: # ...
- C风格字符串和C++string对象的相互转化
一.C风格的字符串转化为C++的string对象 C++中,string 类能够自动将C 风格的字符串转换成string 对象 #include <iostream> #include ...
- Android中五大字符串总结(String、StringBuffer、StringBuilder、Spanna
https://www.aliyun.com/jiaocheng/2861.html?spm=5176.100033.1.35.2ed56b03CbsYFK 摘要:String.StringBuffe ...
- Java字符串池(String Pool)深度解析
版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! 在工作中,String类是我们使用频率非常高的一种对象类型.JVM为了提升性能和减少内存开销,避免字符串的重复创建,其维护了一块特殊的内存 ...
- python3.4学习笔记(十五) 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
python3.4学习笔记(十五) 字符串操作(string替换.删除.截取.复制.连接.比较.查找.包含.大小写转换.分割等) python print 不换行(在后面加上,end=''),prin ...
- Java基础-字符串连接运算符String link operator
Java基础-字符串连接运算符String link operator 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 字符串链接运算符是通过“+”进行拼接的. 一.使用“+”进行字 ...
随机推荐
- asp web api 怎么使用put和delete。
Method Overriding RESTful services allow the clients to act on the resources through methods such as ...
- windows下python的包管理器pip安装
pip: A tool for installing and managing Python packages. 要用到第三方包,python的版本就必须是2.7 https://pypi.pyth ...
- jszs 对象引用
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- 消除QQ表情小游戏
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- ECMAScript 6 入门学习笔记(持续更新)
1.let命令(作用同var) ES6新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效. { let a = 10; var b = 1; } ...
- vim之vba文件
[vim之vba文件] Vimball 官方描述: The vimball plugin facilitates creating, extracting , and listing the cont ...
- HDU 1392 Surround the Trees 构造凸包
又是一道模板题 #include <iostream> #include <cstring> #include <cstdlib> #include <cst ...
- C#中利用委托实现多线程跨线程操作
在使用VS2005的时候,如果你从非创建这个控件的线程中访问这个控件或者操作这个控件的话就会抛出这个异常.这是微软为了保证线程安全以及提高代码的效率所做的改进,但是也给大家带来很多不便. 其实解决这个 ...
- 关于WebPlayer Sandbox的小节
不可以像其他build target一样读写I/O 不可以call一些private或者internal methord 只要在一个top level的domain下可以不需要xml dmain po ...
- C:矩形相交、相包含、相离关系判断
矩形相交 包含 问题.参考 假定矩形是用一对点表达的(minx, miny) (maxx, maxy),那么两个矩形 rect1{(minx1, miny1)(maxx1, maxy1)} ...