概述

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的更多相关文章

  1. 字符串的使用(string,StringBuffer,StringBuilder)

    String中==与equals的区别:==比较字符串中的引用相等equals比较字符串中的内容相等(因为字符串有重写equals方法) string常用的方法 返回类型 方法 操作功能 Char c ...

  2. Swift_字符串详解(String)

    Swift_字符串详解(String) 类型别名 //类型别名 fileprivate func testTypeAliases() { let index = String.Index.self p ...

  3. C# 字符串比较大小 string.Compare()方法

    string.Compare方法,用来比较2个字符串值得大小 string.Compare(str1, str2, true); 返回值: 1 : str1大于str2 0 : str1等于str2 ...

  4. C风格字符串和C++ string 对象赋值操作的性能比较

    <<C++ Primer>> 第四版 Exercise Section 4.3.1 部分Exercise 4.2.9 习题如下: 在自己本机执行如下程序,记录程序执行时间: # ...

  5. C风格字符串和C++string对象的相互转化

    一.C风格的字符串转化为C++的string对象 C++中,string 类能够自动将C 风格的字符串转换成string 对象   #include <iostream> #include ...

  6. Android中五大字符串总结(String、StringBuffer、StringBuilder、Spanna

    https://www.aliyun.com/jiaocheng/2861.html?spm=5176.100033.1.35.2ed56b03CbsYFK 摘要:String.StringBuffe ...

  7. Java字符串池(String Pool)深度解析

    版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! 在工作中,String类是我们使用频率非常高的一种对象类型.JVM为了提升性能和减少内存开销,避免字符串的重复创建,其维护了一块特殊的内存 ...

  8. python3.4学习笔记(十五) 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)

    python3.4学习笔记(十五) 字符串操作(string替换.删除.截取.复制.连接.比较.查找.包含.大小写转换.分割等) python print 不换行(在后面加上,end=''),prin ...

  9. Java基础-字符串连接运算符String link operator

    Java基础-字符串连接运算符String link operator 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 字符串链接运算符是通过“+”进行拼接的. 一.使用“+”进行字 ...

随机推荐

  1. InfiniBand

    Mellanox InfiniBand卡线缆性能延迟性测试程序源码,C源码实现操作mysql库,实现简单的增删改查,代码当前用的是增插入20000条数据 具体见源码 #include <mysq ...

  2. 自然对数e

    上学时课本里提到过,有一种以无理数e=2.71828--为底数的对数,称为自然对数.当时老师并没有讲明白这是个啥东西.并且还有一个很奇怪的极限,也是靠记忆的,完全不理解. \[\lim_{n\to\i ...

  3. AutoCAD DxfCode组码值说明

    值 说明 -5 APP:永久反应器链 -4 APP:条件运算符(仅与 ssget 一起使用) -3 APP:扩展数据 (XDATA) 标记(固定) -2 APP:图元名参照(固定) -1 APP:图元 ...

  4. 思科ASA系列防火墙配置手册

    使用console连接线登录方法 1.使用cisco的console连接线,连接设备的console口和计算机com口(笔记本用USB转COM口连接线)2.使用超级终端或secureCRT软件连接设备 ...

  5. 在drupal7中动态的为某个内容类型添加字段

    $myField_name = "my_new_field_name"; if(!field_info_field($myField_name)) // check if the ...

  6. pureMVC学习之一

    //1var  MainWindow: TMainWindow;begin  Application.Initialize;  Application.MainFormOnTaskbar := Tru ...

  7. C#委托及事件处理机制浅析

    事件可以理解为某个对象所发出的消息,以通知特定动作(行为)的发生或状态的改变.行为的发生可能是来自用户交互,如鼠标点击:也可能源自其它的程序逻辑.在这里,触发事件的对象被称为事件(消息)发出者(sen ...

  8. ssh 框架整合试例 (spring+struts2+hibernate)

    1.首先用Eclipse创建一个web项目(Eclipse EE 版) new->Other-> 输入web 然后选择Dynamic Web Project->next-> 输 ...

  9. 常见MFC UI界面库[转]

    Xtrme toolkit,BCGControlBar,SkinMagic,AppFace,Skin++,Uskin++,SYGUI,LibUIDK,GuiToolkit,GardenUI等等,除了后 ...

  10. 第二章TP-Link 703N OpenWrt刷回原厂固件

    (TP官网)首先原厂固件下载 用终端,使用cat /proc/mtd查看路由支持的升级命令,我的是root@OpenWrt:~# cat /proc/mtd dev:    size   erases ...