C++ 字符串处理类 ProcessString (包含常用字符串处理函数)
ProcessString.h
//Linux & C++11
#pragma once
//包含系统头文件
#include <string>
#include <sstream>
#include <vector>
//宏定义:参数流向
#define IN
#define OUT
#define INOUT
//使用命名
using std::string;
using std::istringstream;
using std::vector;
namespace sinicheveen
{
class ProcessString
{
public:
//group 1:判断型函数
//判断一个字符串是不是数字字符串
//e.g. "023456789" --> true; "12A56" --> false
static bool isNumString(IN const string& strIn);
//判断一个字符串是不是以逗号分隔的数字字符串,且字符串最后一个字符不能是逗号,中间不能有空格
//e.g. "1,2,3,4" --> true; "1,3.14,9" --> true; "1,2,3,4," --> false; "1,A,5" --> false
static bool isNumStringWithComma(IN const string& strIn);
//判断一个字符串是不是以某种分隔符分隔的数字字符串,且字符串最后一个字符不能是分隔符,中间不能有空格
//e.g. "1,2,3,4" --> true; "1,3.14,9" --> true; "1,2,3,4," --> false; "1,A,5" --> false
static bool isNumStringWithSeparator(IN const string& strIn, IN const char cSeparator = ',');
//group 2:字符串转数字
/*
*Name:stringToNumber
*Description:字符串转数字
*Input:IN const string& strIn,一个字符串
*Return:T:转换后的数字
*Caution:
*/
template<typename T>
T stringToNumber(IN const string& strIn)
{
istringstream iss(strIn);
T num;
iss >> num;
return num;
} //stringToNumber()
/*
*Name:extractNumFromString
*Description:从数字字符串中提取出数字
*Input:IN const string& strIn,以分隔符分隔的一个数字字符串
* OUT vector<T>& vExtractedNums,提取出的数字
* IN const char cSeparator = ',',数字之间的分隔符,默认是英文逗号
*Return:bool,成功返回 true,失败返回 false
*Caution:
*/
template <typename T>
bool extractNumFromString(IN const string& strIn, OUT vector<T>& vExtractedNums, IN const char cSeparator = ',')
{
//判断是不是数字字符串
for (const auto& iChar : strIn)
{
if ((iChar >= '0' && iChar <= '9') || iChar == '.' || iChar == cSeparator)
{
continue;
}
else
{
return false;
}
}
//提取数字
size_t startPos = 0;
do
{
size_t endPos = strIn.find(cSeparator, startPos);
if (endPos != string::npos)
{
string strNum;
strNum.assign(strIn, startPos, endPos - startPos);
T num;
num = stringToNumber<T>(strNum);
vExtractedNums.push_back(num);
startPos = endPos + 1;
if (startPos > (strIn.size() - 1))
{
break;
}
}
else
{
string strNum;
strNum.assign(strIn, startPos, strIn.size() - startPos);
T num;
num = stringToNumber<T>(strNum);
vExtractedNums.push_back(num);
break;
}
} while (1);
return true;
} //extractNumFromString()
//group 3:格式处理函数
//移除行首和行尾的空白字符
static void rmSpaceInBegAndEnd(INOUT string& strIn);
//gruop 4:从键盘读取
//从键盘读取一行字符串,直到遇到 \n 为止,中间遇到其它空白字符,仍继续
static void readStringEndByEnter(OUT string& strWhatRead);
//从键盘读取一行字符串,直到遇到多个 \n 为止(由用户定义个数),中间遇到其它空白字符,仍继续
static void readStringEndByMultiEnter(OUT string& strWhatRead, IN const int32_t numOfEnter = 2);
//group 5:字符串分隔
//分隔 C 风格字符串
static void spliceString(IN char* pcStrIn, OUT vector<string>& vSubStrings, IN const char* pcSepartor);
}; //ProcessString
} //sinicheveen
未完 ......
点击访问原文(进入后根据右侧标签,快速定位到本文)
C++ 字符串处理类 ProcessString (包含常用字符串处理函数)的更多相关文章
- 用最基本的遍历来实现判断字符串 a 是否被包含在字符串 b 中,并返回第一次出现的位置(找不到返回 -1)
用最基本的遍历来实现判断字符串 a 是否被包含在字符串 b 中,并返回第一次出现的位置(找不到返回 -1) 例子: a='12';b='1234567'; // 返回 0 a='47';b='1234 ...
- Mysql字符串字段判断是否包含某个字符串的3种方法
方法一: SELECT * FROM users WHERE emails like "%b@email.com%"; 方法二: 利用MySQL 字符串函数 find_in_set ...
- (转)Mysql字符串字段判断是否包含某个字符串的3种方法
方法一: SELECT * FROM users WHERE emails like “%b@email.com%”; 方法二: 利用mysql 字符串函数 find_in_set(); SELECT ...
- C#--数组、字符与字符串--StringBuilder类、字符与字符串、字符及转义字符
C#--数组 字符与字符串--StringBuilder类 字符与字符串 字符及转义字符
- Mysql字符串字段判断是否包含某个字符串的3种方法[转载]
方法一: SELECT * FROM users WHERE emails like "%b@email.com%"; 方法二: 利用mysql字符串函数 find_in_set( ...
- js判断字符串是否以指定字符串开头或是否包含指定字符串
1. 用js判断一个字符串是否是以某个子字符串开头如:ssss001是否以ssss开头, 可以这样做: 1 2 3 4 5 6 var fdStart = strCode.indexOf(" ...
- 13.Python字符串详解(包含长字符串和原始字符串)
简单地理解,字符串就是“一串字符”,也就是用引号包裹的任何数据,比如“Hello,Charlie”是一个字符串,“12345”也是一个字符串. Python 要求,字符串必须使用引号括起来,可以使用单 ...
- Mysql字符串字段判断是否包含某个字符串的方法
方法一:like SELECT * FROM 表名 WHERE 字段名 like "%字符%"; 方法二:find_in_set() 利用mysql 字符串函数 find_in_s ...
- Mysql hql字符串字段中是否包含某个字符串,用 find_in_set
有这样一个需求,在Mysql数据库字符串字段(权限)中,有范围在 1 到 N 之间代表不同权限的值,分别被','分开,现在要取出具有某权限的所有成员列表. 创建表: 1 CREATE TABLE us ...
随机推荐
- [树链剖分]BZOJ3589动态树
题目描述 别忘了这是一棵动态树, 每时每刻都是动态的. 小明要求你在这棵树上维护两种事件 事件0: 这棵树长出了一些果子, 即某个子树中的每个节点都会长出K个果子. 事件1: 小明希望你求出几条树枝上 ...
- certification on windows and
https://jingyan.baidu.com/article/335530dae0eb2319ca41c378.html
- ubuntu取消自动登录
/etc/lightdm/lightdm.conf.d/50-nvidia.conf 注释 autologin-user=<YOUR USER>
- shell编程系列15--文本处理三剑客之awk格式化输出printf
shell编程系列15--文本处理三剑客之awk格式化输出printf printf的格式说明符 格式符 含义 %s 打印字符串 %d 打印十进制数 %f 打印一个浮点数 %x 打印十六进制数 %o ...
- OpenBLAS编译 Release x64 Win10 vs2015
>------ 已启动生成: 项目: ZERO_CHECK, 配置: Release x64 ------ > Checking Build System > CMake does ...
- QWidget中结束QThread线程
QThread安全结束 protected: void closeEvent(QCloseEvent *event); void closeEvent(QCloseEvent *event) { th ...
- 【FreeMarker】Spring MVC与FreeMarker整合(二)
前一篇介绍了FreeMarker的基本使用,本例介绍Spring MVC与FreeMarker整合 不熟悉项目搭建,可参考 [FreeMarker]FreeMarker快速入门(一) 整合 1.新建S ...
- ABAP DEMO ALVtree显示BOM层级
展示效果: *&---------------------------------------------------------------------* *& Report YCX ...
- Flink统计当日的UV、PV
Flink 统计当日的UV.PV 测试环境: flink 1.7.2 1.数据流程 a.模拟数据生成,发送到kafka(json 格式) b.flink 读取数据,count c. 输出数据到kafk ...
- Vue个人笔记
目录 前言 Vue的插值表达式怎么保留小数位 表格列被挤,位置很小 v-if多个条件 前言 此笔记仅仅记录我在使用过程中遇到的一些问题,不定期更新 Vue的插值表达式怎么保留小数位 插值表达式其实都是 ...