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 (包含常用字符串处理函数)的更多相关文章

  1. 用最基本的遍历来实现判断字符串 a 是否被包含在字符串 b 中,并返回第一次出现的位置(找不到返回 -1)

    用最基本的遍历来实现判断字符串 a 是否被包含在字符串 b 中,并返回第一次出现的位置(找不到返回 -1) 例子: a='12';b='1234567'; // 返回 0 a='47';b='1234 ...

  2. Mysql字符串字段判断是否包含某个字符串的3种方法

    方法一: SELECT * FROM users WHERE emails like "%b@email.com%"; 方法二: 利用MySQL 字符串函数 find_in_set ...

  3. (转)Mysql字符串字段判断是否包含某个字符串的3种方法

    方法一: SELECT * FROM users WHERE emails like “%b@email.com%”; 方法二: 利用mysql 字符串函数 find_in_set(); SELECT ...

  4. C#--数组、字符与字符串--StringBuilder类、字符与字符串、字符及转义字符

    C#--数组 字符与字符串--StringBuilder类 字符与字符串 字符及转义字符

  5. Mysql字符串字段判断是否包含某个字符串的3种方法[转载]

    方法一: SELECT * FROM users WHERE emails like "%b@email.com%"; 方法二: 利用mysql字符串函数 find_in_set( ...

  6. js判断字符串是否以指定字符串开头或是否包含指定字符串

    1.  用js判断一个字符串是否是以某个子字符串开头如:ssss001是否以ssss开头, 可以这样做: 1 2 3 4 5 6 var fdStart = strCode.indexOf(" ...

  7. 13.Python字符串详解(包含长字符串和原始字符串)

    简单地理解,字符串就是“一串字符”,也就是用引号包裹的任何数据,比如“Hello,Charlie”是一个字符串,“12345”也是一个字符串. Python 要求,字符串必须使用引号括起来,可以使用单 ...

  8. Mysql字符串字段判断是否包含某个字符串的方法

    方法一:like SELECT * FROM 表名 WHERE 字段名 like "%字符%"; 方法二:find_in_set() 利用mysql 字符串函数 find_in_s ...

  9. Mysql hql字符串字段中是否包含某个字符串,用 find_in_set

    有这样一个需求,在Mysql数据库字符串字段(权限)中,有范围在 1 到 N 之间代表不同权限的值,分别被','分开,现在要取出具有某权限的所有成员列表. 创建表: 1 CREATE TABLE us ...

随机推荐

  1. ubuntu之路——day6(今天对数据集的建立有了更深的体会)

    两个重点: 一.举个例子,如果建立一个图像识别的数据集,你的训练集和你的训练验证集是从网上爬下来的(也就是说这些图片的大小.像素.后期制作都可能很精美),你真正的测试集是用户的手机上传(不同的手机.环 ...

  2. adc0和adc1

    1 单片机里ADC是数模转换器:功能就是将模拟信号(电压0-5V)转换成数字信号 可以转换成8位数字量(即00H~FFH)也可以转换成10位.12位.16位的数字量.转换后的数字量与模拟量在数值上成正 ...

  3. MiniUI增删改查操作及确认按钮

    原文:https://blog.csdn.net/codezdx/article/details/81565043 1.动态创建列:尽量不要直接在html文件里创建列,动态设置在js文件里方面添加.修 ...

  4. [转发]ASP.NET Core2集成Office Online Server(OWAS)实现办公文档的在线预览与编辑(支持word\excel\ppt\pdf等格式)

    转载自:https://www.cnblogs.com/Andre/p/9549874.html Office Online Server是微软开发的一套基于Office实现在线文档预览编辑的技术框架 ...

  5. [转]浅谈HTTP中GET、POST用法以及它们的区别

    HTTP定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE.URL全称是资源描述符.我们可以这样认为: 一个URL地址,它用于描述一个网络上的资源,而HTT ...

  6. ROS tf-数据类型

    博客参考:https://www.ncnynl.com/archives/201702/1305.html ROS与C++入门教程-tf-数据类型 说明: 介绍roscpp的Data Types(数据 ...

  7. 003-结构型-06-组合模式(Composite)

    一.概述 将对象组合成树形结构以表示“部分一整体”的层次结构 组合模式是为了表示那些层次结构,同时部分和整体也可能是一样的结构,常见的如文件夹或者树. 通过递归手段来构造树形的对象结构,并可以通过一个 ...

  8. 浏览器显示 req Provisional headers are shown

    现象: 原因: 请求被插件什么的拦截导致. 修复: 换浏览器也可以. ​

  9. DBGridEh中根据单价和数量如何计算金额?

    单价和数量输入完后,在数量单元格往任何方向移动(上下左右),金额都能自动计算.如何实现? 不要在UI元素的事件中计算字段,你可以在单价字段和数量字段的OnChange事件中进行计算.假设数据集名称为D ...

  10. [ jenkins ] git+jenkins+maven + ansible 部署java程序

    1. 工具介绍 git:版本控制,一般都是托管到代码仓库的.如 github.coding.gitlab (本文以 coding 为例) jenkins:持续集成工具之一,也是最常用的工具,主要工作就 ...