STL—String(字符容器)

  C语言中用char类型来处理字符,对于字符串,只能通过字符数组来处理,显得很不方便。C++STL就比较好了,提供了string这个基本字符系列容器来处理字符串。string很厉害,它不仅可以用下标法来随机访问元素,还提供了添加、删除、替换、查找和比较丰富的方法,来满足我们对字符串的各种操作。而且它还很容易理解!我们呢,就简单的把它理解为一种基本的数据类型——字符串类就完事了!

下面就开始介绍string的用法喽 请往↓看
几个常用的操作
s.length();      //返回字符串长度,,其实这个不太常用
s.size();        //同样是返回长度,这个就比较常用了
s.empty();       //判断是否为空,空为真,不空为假
revrese(s.begin(),s.end());//把区间内元素反向排序,这个函数包含在<algorithm>里面
其他的在下面详细介绍一哈
头文件
#include<string>//这个不必多说,^_^
从定义和初始化开始

  1、定义

char s[]="1234"; //下面用的到的
string str,s_str;//这就定义完啦,str和s_str就是一个string对象了

  2、初始化:

str="123";//这样可以
str=s;    //这样也可以!  

:当然也可以用cin等输入函数进行初始化, 这里值得注意的一点就是:先用scanf输入char型数组s,然后str=s;速度会比较快!
  3、在定义的时候初始化

string str=s;           //编号1
string str(s,s+4);      //编号2
string s_str(str);      //编号3
string s_str(s.begin().s.end()); //编号4

:很容易看出来1和3,2和4是很相像的,事实也是如此,区别只是参数的类型不同(char*和string)(特注:我个人是这么理解的,地址,和代器所指的地址应该差别不大,所以我说只是参数类型不同。有可能是错误观点,但目前还没出过错,请选择性吸收!^ _ ^)

然后是插入

  1、利用“+”运算符从尾部插入

str=str+"345";
str=str+s;     //运算符‘+’后面跟字符数组
str=str+s_str; //运算符‘+’后面跟string对象

:发现了string的强大了吗,可以直接用加法运算符啊!!其实除了+,它还可以直接用 >、=、<、>=、<=、!=这些比较运算符!!!
  2、利用 append 尾部插入

str.append();//括号里的参数可以是("asd")这样的,也可以是字符数组和string对象。

  3 、利用 insert 插入

str.insert(n,s);    // 在字符串str第2个位置插入字符串s(参数s可以是string对象,也可以是字符数组)
str.insert(n,s,m);  // 在字符串str第n个位置插入字符串s的前m个字符
str.insert(n,m,c);  // 在字符串str第n个位置插入m个字符c

:数字n、m可以用迭代器代替。

有插入当然也有删除喽

  1 、利用 erase 删除字符或字符串

str.erase(5);            //删除下标为5(包括5)之后的所有字符
str.erase(1,4);          //删除下标为[1,4]的所有元素
str.erase(str.begin());  //删除迭代器所指字符
str.erase(str.begin(),str.begin()+3);    //删除迭代器所指区间的所有字符

  2 、清空字符串

str="";   //感觉这个很牛皮,直接赋空了给。但是如果用迭代器输出的话,会输出一个空格。。。
接着就是替换

  利用replace替换字符串

str.replace(n,m,s);      // 将字符串str第m个位置开始往后的n个字符替换为字符串s
str.replace(n,m,s,x);    // 替换为字符串s的前x个字符
str.replace(n,m,x,c);    // 替换为x个字符c
str.replace(n,m,s,x,y);  // 替换为字符串s中第x个位置开始往后的y个字符

:s只可以是char类型的字符数组,string对象不可以!如果你想把目标替换成某个字符,可以使s="?";

还有查找

  利用find查找字符或字符串

str.find(c);    //返回str中第一次出现字符c的位置  
str.find(s);    //返回str中第一次出现字符串s的位置
str.rfind(c);    //返回str中最后一次出现字符c的位置//与反向迭代器rbegin()有点类似哈
str.rfind(s);    //返回str中最后一次出现字串s的位置

:参数s可以是char类型的字符数组,也可以是string对象。如果没有找到就返回4294967295!!!

最后是比较

  利用compare比较字符串

str.compare();   //参数可以是字符数组,也可以是string对象

:大于返回1;等于返回0;小于返回-1;

补充一点字符串与数值相互转化的操作

一、字符串转数字:

1、利用sscanf函数

sscanf(s,"%d",&a);  //s只能是char类型的字符数组,不能是string对象,
sscanf("1&2+3","%d&%d+%d",&a,&b,&c); //a=1;b=2;c=3   要注意的是间隔符(此处的为&,+)必须保持严格一致

:可以识别正负,忽略开头的空字符,当遇到第一个非数字字符时结束扫描(如:" -123c34",转化之后为:-123)
2、利用c++函数

    double stod(const string &s)//stod为函数名,此函数的特点与sscanf一样,可以识别正负,忽略开头的空字符,
    {                          //当遇到第一个非数字字符时结束扫描
        istringstream i(s);
        double x;
        if(i >> x)
            return x;
        return 0.0;    //发生错误时返回0.0
    }
    char s[]="1234";
    double a=stod(s);  //a=1234.000000    %lf 默认保留六位小数

:这是模板!!!
3、利用库函数

 stoi()//c++库函数,在头文件string内
 atoi()//C语言库函数,在头文件stdib.h内
 int i=atoi(s.c_str);   //先将string转化为char*,然后在使用c库函数

:只写了两个转化成int型数值的,其他还有double、long等就不一一往上写了。

二、数字转字符串:

1、利用sprintf函数

sprintf(s,"%d",1234);    

:s只能是char类型的字符数组,不能是string对象!!后面的可以是数值,也可以是变量。
2、利用c++函数模板

    string atois(double x)
    {
        ostringstream o;
        if(o << x)
        {
            return x;
        }
        return "conversion error";//转换错误
    }

3、利用库函数

itoa();//C语言库函数,在头文件stdib.h内
to_string( )//c++库函数,它定义在sstream头文件中
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值