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<char>来存取

  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_voew 字符串视图类,内部指保存了一个指针和长度,无论是拷贝,还是修改,都比 string 的成本大大减小。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值