C++对string字符串进行trim和split操作

c++小白的学习笔记;
记录c++ trim和split的实现方法:

#include <iostream>
#include <algorithm>
#include <vector>
#include <regex>

using namespace std;

namespace
{
    bool isntspace(const char &ch)
    {
        return !isspace(ch);
    }
} // end of namespace

const std::string ltrim(const std::string &s)
{
    std::string::const_iterator iter = find_if(s.begin(), s.end(), isntspace);
    return std::string(iter, s.end());
}

const std::string rtrim(const string &s)
{
    std::string::const_iterator iter = find_if(s.rbegin(), s.rend(), isntspace).base();
    return std::string(s.begin(), iter);
}

const std::string trim(const std::string &s)
{
    std::string::const_iterator iter1 = find_if(s.begin(), s.end(), isntspace);
    std::string::const_iterator iter2 = find_if(s.rbegin(), s.rend(), isntspace).base();

    return iter1 < iter2 ? string(iter1, iter2) : std::string("");
}

const void Stringsplit(const string& str, const string& split, vector<string>& res)
{
	std::regex reg(split);		// 匹配split字符串
	std::sregex_token_iterator pos(str.begin(), str.end(), reg, -1);
	decltype(pos) end;              // 自动推导类型 
	for (; pos != end; ++pos)
	{
		res.push_back(pos->str());
	}
}

int main()
{
    cout << "hello world!\n";

    // 待解析数据
    std::string temp = "           Java Heap:     3324                          29460   ";
    cout << "temp:" << temp << "\n";

    // trim移除前后空格;
    std::string trimTemp = trim(temp);
    cout << "trimTemp:" << trimTemp << "\n";

    // 获取后面的3324   29460数据
    vector<std::string> list;
    Stringsplit(trimTemp, ":", list);
    std::string value = list[1]; //值是"     3324                          29460"

    //再做一次trim,移除3324前面的空格
    std::string trimValue = trim(value);

    // 用空格分割,获取3324数据和29460数据;
    vector<std::string> valueList;
    Stringsplit(trimValue, " ", valueList);
    for (size_t i = 0; i < valueList.size(); i++)
    {
        cout << "splitItem:" << i << "value:" <<  valueList[i] << "\n";
    }

    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值