侧边栏壁纸
博主头像
燕雀の家 博主等级

行动起来,活在当下

  • 累计撰写 13 篇文章
  • 累计创建 5 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

C++操作string

Administrator
2025-01-12 / 0 评论 / 0 点赞 / 7 阅读 / 0 字
namespace do_string{
    using namespace std;
    static const std::string WHITE_SPACE = " \n\r\t\f\v";
    /////
    std::string ltrim(const std::string &);
    std::string rtrim(const std::string &);
    std::string trim(const std::string &);
    std::vector<std::string> split(const std::string& ,const std::string& );
    std::vector<std::string> split(const std::string& ,const std::string& ,bool );
    std::string join(const vector<std::string> & ,const std::string &);
    /////
    std::string ltrim(const std::string &s)
    {
        size_t start = s.find_first_not_of(WHITE_SPACE);
        return (start == std::string::npos) ? "" : s.substr(start);
    }
    std::string rtrim(const std::string &s)
    {
        size_t end = s.find_last_not_of(WHITE_SPACE);
        return (end == std::string::npos) ? "" : s.substr(0, end + 1);
    }
    std::string trim(const std::string &s) {
        return rtrim(ltrim(s));
    }
    std::vector<std::string> split(const std::string& str,const std::string& delim) {
        return split(str,delim,false);
    }

    std::vector<std::string> split(const std::string& str,const std::string& delim,bool is_trim) {
        std::vector<string> res;
        if (str.empty()){
            return res;
        }
        std::string string1 = str + delim; //*****扩展字符串以方便检索最后一个分隔出的字符串
        std::string::size_type pos;
        std::size_t size = string1.size();
        for (int i = 0; i < size; ++i) {
            pos = string1.find(delim, i); //pos为分隔符第一次出现的位置,从i到pos之前的字符串是分隔出来的字符串
            if (pos != string::npos) { //如果查找到,如果没有查找到分隔符,pos为string::npos
                string s = string1.substr(i, pos - i);//*****从i开始长度为pos-i的子字符串
                if(is_trim){
                    res.push_back(trim(s));//两个连续空格之间切割出的字符串为空字符串,这里没有判断s是否为空,所以最后的结果中有空字符的输出,
                }else{
                    res.push_back(s);//两个连续空格之间切割出的字符串为空字符串,这里没有判断s是否为空,所以最后的结果中有空字符的输出,
                }
                i = pos + delim.size() - 1;
            }
        }
        return res;
    }

    std::string join(const vector<std::string> & res, const std::string & delim){
        std::string ans;
        for(int i=0;i<res.size()-1;++i) ans=ans+res[i]+delim;
        ans+=res[res.size()-1];
        return ans;
    }

}


0

评论区