• C++ 使用STL string 实现的split,trim,replace


    实现string 的去除两边空格,按指定字符截取,替换

    #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;
    }

  • 相关阅读:
    JavaScript Web页面内容导出到Word、Excel (转载)
    合并多个声音文件
    龙舟记
    c#获取应用程序目录
    ADO.NET数据库连接池研究(一) 查看连接池数 (转)
    UpdatePanel 内控件 更新“外的”控件【转】
    web客户端播放wav文件
    解决DataList控件无缝滚动图片(转)
    关闭sleeping连接进程在Sql Server2000数据库存储过程中(转)
    win7下没有注册类别 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))
  • 原文地址:https://www.cnblogs.com/hailexuexi/p/2323161.html
Copyright © 2020-2023  润新知