C++ 认识string类

一.string类

  1. 认识:首先认识一下字符串,string其实不是一个真正的“类型”,而是模板类basic_string的特化形式

    是一个typedef:

    using string = std::basic_string<char>;//string其实是一个别名
    
  2. 简单操作

        //功能支持简单测试
        string s = "hello,wolrd";
        //获取长度
        cout << s.size() << " " << s.length() << endl;
        //比大小
        cout << (s > "hea") << endl;
        //获取字串
        auto s1 = s.substr(0,2);//意为从第0个下标开始的2个字符组成的字符串
        cout << s1 << endl;
        //下标访问
        cout << s[1] << " " << s.at(1) << endl;
        //查找字符串,string::npos为找不到,找到,返回第一个的索引
        cout << (s.find("llo") == string::npos) << endl;
    

    注意:string的接口比较复杂,除了字符串操作,花园begin(),end(),push_back()等类似容器的操作,会使人容易把它当成一个”字符串容器“,但字符串和容器完全是两个不同的概念,存储的应该是有关系的文本,如若没有关系,建议使用vector来存取

  3. 字面量操作:c++11为方便使用字符串,新增字面量后缀 “s”,明确表示string类型,可以使用 auto关键字推出string类型,而不再是以往推出的传统的c风格的数组,使用如下:

        //字面量后缀 "s",明确表示string类型
        //需要打开命名空间才能使用 using namespace std::literals::string_literals;
        
        auto str1 = "qwer"; //实际auto推出的类型为 const char[]
        auto str2 = "qwert"s; //在结尾添加后缀“s”,则推出sting
        //添加s后临时变量可以直接调用string的成员函数
    
        cout << "hello"s.size() << endl; 
    
  4. 原始字符串:由于在c++中,字符有 “转义” 的用法,所以很多时候在字符前面添加了一个 “\”,就会使得后面的字母发生转义。但是有时候我们不想转义,想原样输出,就得转义很麻烦,而 原始字符串的出现,就是为了处理这一类情况和正则表达式,具体语法如下

        //比原来的引号就多了一个大写字母R和一对圆括号
        string s = R"(Hello,world)";//输出为hello,world
    
        string sc2 = "\mklp"; //输出 mklp,如果我们要输出"\mklp",则需要转义如下
        string sc = "\"\\mklp\"";//输出为"\mkp"
        cout << sc2 << endl;// sc2: mklp
        cout << sc << endl; // sc: "\mklp"
    
        string sc3 = R"("\mklp")"; //使用原始字符串
        cout << sc3 << endl; // sc3: "\mklp",不用再去去转义
        //若要输出R"(mklp)"的话,则要特殊处理下,在圆括号()两边加上“界定符”--“==”
        string sc4 = R"==(R"(mklp)")==";
        cout << sc4 << endl; //sc4: R"(mklp)"
    
  5. 字符串转换函数:在处理字符串的时候,常常要将字符串和数字相互转换。但是以前只能使用 c函数 atoi()、atol(),而它们的参数是c字符串而不是string,转起来很麻烦。c++11添加了string的转换函数

    • stoi()、stol()、stoll()等将字符串转换成整数
    • stof()、stod()等将字符串转换成浮点数
    • to_string()把整数、浮点数转换为字符串。
        string str_num = "123";
        //int int_num = atoi(str_num);//error: no function convent "string" to "const char*";
        int int_num = stoi(str_num);
        cout << int_num << endl; // 123
    
        string str_num1 = "123.789";
        double dou_num = stod(str_num1);
        cout << dou_num << endl; // 123.789
    
        int k = 123456;
        string sk = to_string(k);
        cout << sk << endl; // 123456
    

    c++17还新增了一个 string_view 字符串视图类,内部指保存了一个指针和长度,无论是拷贝,还是修改,都比 string 的成本大大减小。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值