Golden Blonde 发表于 2016-7-8 18:17:47

【C++】std::string的一些学习记录

原帖网址:http://www.m5home.com/bbs/thread-8848-1-1.html
未经允许请勿转发

前言:我本人一直很不待见C++,但公司里的工程都是C++写的,不爽归不爽,还是被迫使用了一段时间。最近发现C++比起C来,某些地方还是有点优势的,比如字符串处理。C++里字符串类型很多,除了经典的CHAR*和WCHAR*,还有CString和std::string。个人不推荐用CString,因为这货是微软一家的,而std::string则是多平台兼容的。
一、使用std::string需要包含什么?#include <string>二、如何利用std::string和std::vector实现类似VB6的Split函数(根据标识符把字符串分割为多个子字符串)?
#include <string>
#include <vector>

void SplitStdString(const std::string& s, std::vector<std::string>& v, const std::string& c)
{
        std::string::size_type pos1, pos2;
        pos2 = s.find(c);
        pos1 = 0;
        while(std::string::npos != pos2)
        {
                v.push_back(s.substr(pos1, pos2-pos1));
                pos1 = pos2 + c.size();
                pos2 = s.find(c, pos1);
        }
        if(pos1 != s.length())
                v.push_back(s.substr(pos1));
}

int main()
{
        char g_fw_policy1[]="4444;333;22;1";
        char g_fw_policy2[]="a||bb||ccc||dddd";
        std::vector<std::string> v;
        std::string s;
        //
        s = g_fw_policy1;
        SplitStdString(s,v,";");
        for(long i=0;i<v.size();i++)
                puts(v.at(i).c_str());
        //
        v.clear();
        s = g_fw_policy2;
        SplitStdString(s,v,"||");
        for(long i=0;i<v.size();i++)
                puts(v.at(i).c_str());
        system("pause");
        return 0;
}三、如何把std::string转为CStringCString cs = ss.c_str();

0xAA55 发表于 2019-7-30 18:47:36

论stl的常见例子和应用。

说起来我踩过string的+运算符重载的坑,虽说我不会傻到用一个存储了十进制数字的string去 + 一个int,但我踩的其实是性能优化上的坑:用一个string去装一个string + 另一个string的结果,这个过程中的内存分配、构造、析构都很多。原本设想会很快的程序快不起来,搞得我很头疼。

从那以后我发现还有个叫“stringstream”的玩意儿用于使用类似cout的方式实现快速拼接字符串。
ostringstream os;
os << "dec: " << 15 << " hex: " << std::hex << 15 << endl;
cout << os.str() << endl;https://stackoverflow.com/questions/20594520/what-exactly-does-stringstream-do/44782764
https://en.cppreference.com/w/cpp/io/basic_stringstream
页: [1]
查看完整版本: 【C++】std::string的一些学习记录