C++ 字符串处理类 ProcessString (包含常用字符串处理函数)
2024-08-26 16:41:18
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
未完 ......
点击访问原文(进入后根据右侧标签,快速定位到本文)
最新文章
- 【Alpha】Daily Scrum Meeting第一次
- Python 3 利用 subprocess 实现管道( pipe )交互操作读/写通信
- IOS开发中UI编写方式——code vs. xib vs.StoryBoard
- 用Perl编写Apache模块续二 - SVN动态鉴权实现SVNAuth 禅道版
- gcc与g++的区别
- 每日算法之三十八:Anagrams
- 【原创】leetCodeOj --- Sliding Window Maximum 解题报告
- SOA面向服务的架构理解
- JavaWeb三大组件之一Filter知识总结
- QUIC协议的分析,性能测试以及在QQ会员实践
- 普通PC通过USB转485串口 ModBus-RTU通信协议控制伺服电机
- Selenium-Switch--切换浏览器tab/iframe/alart
- uap
- 记录Linux CentOS 7系统完整部署Docker容器环境教程
- luogu P2680 运输计划 (二分答案+树上差分)
- 从零开始学 Web 之 CSS3(八)CSS3三个案例
- 如何优化JavaScript的构造函数
- spring-AOP框架(基于配置文件的方式配置AOP)
- Delphi中ClientDataSet的用法小结
- P2424 约数和 &;&; 真丶除法分块
热门文章
- mysql 开放端口 外网访问
- oralce 超过1亿条数据的数据库表清理实践
- 使用adb 命令(atrace)抓起systrace的方法。【转】
- shell获取今天、明天、昨天、n天、周、月、年日期
- 到底啥是鸭子类型(duck typing)带简单例子
- Kali Linux又增加一个顶级域名kali.download
- Java基础 if if-else if-else if-else 三种示例
- 【转】Django继承AbstractUser新建User Model时出现auth.User.groups: (fields.E304)错误
- selenium grid用法
- Influxdb修改数据保留策略