zoukankan      html  css  js  c++  java
  • C++ 使用STL string 实现的split,trim,replace修订

    C++ 使用STL string 实现的split,trim,replace-修订 - 知然 - 博客园

    C++ 使用STL string 实现的split,trim,replace-修订

    编辑器加载中...

    使用python的时候默认str 对字符串操作支持非常丰富,相信每个C++程序员都自己写过string的strim、split、replace,

    写个小工具函数,留着用,以前偷懒,写了好几次,这次总结一下,贴出来。

    复制代码
    #include <iostream>
    #include <vector>
    using namespace std;
    
    
    namespace strtool
    {
    string trim(const string& str)
    {
        string::size_type pos = str.find_first_not_of(' ');
        if (pos == string::npos)
        {
            return str;
        }
        string::size_type pos2 = str.find_last_not_of(' ');
        if (pos2 != string::npos)
        {
            return str.substr(pos, pos2 - pos + 1);
        }
        return str.substr(pos);
    }
    
    int split(const string& str, vector<string>& ret_, string sep = ",")
    {
        if (str.empty())
        {
            return 0;
        }
    
        string tmp;
        string::size_type pos_begin = str.find_first_not_of(sep);
        string::size_type comma_pos = 0;
    
        while (pos_begin != string::npos)
        {
            comma_pos = str.find(sep, pos_begin);
            if (comma_pos != string::npos)
            {
                tmp = str.substr(pos_begin, comma_pos - pos_begin);
                pos_begin = comma_pos + sep.length();
            }
            else
            {
                tmp = str.substr(pos_begin);
                pos_begin = comma_pos;
            }
    
            if (!tmp.empty())
            {
                ret_.push_back(tmp);
                tmp.clear();
            }
        }
        return 0;
    }
    
    string replace(const string& str, const string& src, const string& dest)
    {
        string ret;
    
        string::size_type pos_begin = 0;
        string::size_type pos       = str.find(src);
        while (pos != string::npos)
        {
            cout <<"replacexxx:" << pos_begin <<" " << pos <<"\n";
            ret.append(str.data() + pos_begin, pos - pos_begin);
            ret += dest;
            pos_begin = pos + 1;
            pos       = str.find(src, pos_begin);
        }
        if (pos_begin < str.length())
        {
            ret.append(str.begin() + pos_begin, str.end());
        }
        return ret;
    }
    
    }
    
    
    
    
    int main(int argc, char* argv[])
    {
        cout << strtool::trim(" nihao ") <<"\n";
    
        vector<string> vt;
        strtool::split(",o h,,,nice,,,,,,,", vt);
        for (size_t i = 0; i < vt.size(); ++ i)
        {
            cout <<"out:" << vt[i] <<"\n";
        }
    
        string ret = strtool::replace("xxAxxxAxxAxx", "A", "B");
        cout <<"replace:" << ret <<"\n";
        return 0;
    }
    复制代码
  • 相关阅读:
    vb笔记
    linux学习笔记
    linnux--shell
    # 用类来封装动态数组:分文件编写
    面向对象
    c++2
    c++1
    答疑:指针数组字符串
    文件操作
    用函数封装实现对一个数组增删改查
  • 原文地址:https://www.cnblogs.com/lexus/p/2620140.html
Copyright © 2011-2022 走看看