string基本字符系列容器

string基本字符系列容器

  • STL提供了string基本字符系列容器来处理字符串,可以把string理解为字符串类,它提供了添加、删除、替换、查找和比较等丰富的方法。

  • 向量的元素类型可以是string,如vector这样的向量,实际上就类似于C语言中的字符串数组。

  • 使用string容器,需要头文件包含声明“ #include ”

基本使用

创建string对象

  • 创建一个字符串对象s, s是一个空字符串,其长度为0:

    string s;
    

    获取字符串长度 s.length( )

给string对象赋值

  • 直接给字符串对象赋值

     s="hello,wakaka";  
    
  • 把字符指针赋给一个字符串对象

    string s; 
    char ss[5000]; 
    //scanf的输入速度比cin快得多 
    //scanf是C语言的函数,不支持string对象 
    scanf("%s", ss);
    //把整个字符数组赋值给string对象 
    s=ss; 
    
    #include<iostream>
    using namespace std;
    
    int main(){
    	string s1,s2;
    	char c[20];
    	s1="hello,wakaka";
    	scanf("%s",c);
    	s2=c;
    	cout<<s1.length()<<endl; 
    	cout<<s2.length()<<endl;
    	return 0; 
    }
    

在字符串对象尾部添加字符

  • 使用 + 操作符即可

    s=s+'b';
    

    string对象尾部追加字符串

  • 直接使用 + 操作符

     s=s+"123";
    
  • 使用append()方法

    s.append("abc");
    
    #include<iostream>
    using namespace std;
    
    int main(){
    	string s;
    	s="hello,wakaka";
    	s=s+"123";
    	s.append("abc");
    	cout<<s<<endl; 
    	return 0; 
    }
    

    给string对象插入字符

  • 可以使用insert()方法把一个字符插入到迭代器位置之前

    插入的必须是字符

    //定义迭代器
     string::iterator it;
    //迭代器位置为字符串首
    it=s.begin();
    //把字符’p’插入到第1个字符前(注意,字符位置是从0开始计数)
    s.insert(it+1, 'p');
    

访问string对象的元素

  • 使用下标方式随机访问string对象的元素,下标是从0开始计数的
    string对象的元素是一个字符(char)

    s[0];
    

删除string对象的元素

  • 清空一个字符串,则直接给它赋空字符串即可。

  • 使用erase()方法删除迭代器所指的那个元素或一个区间中的所有元素。

    • 左闭右开 [ )
    #include<iostream>
    using namespace std;
    
    int main(){
    	string s;
    	s="hello,wakaka";
    	s.erase(s.begin(),s.begin()+2);
    	cout<<s<<endl; 
    	return 0; 
    }
    

返回string对象的长度

  • 采用length()方法可返回字符串的长度

  • 采用empty()方法,可返回字符串是否为空,如果字符串为空,则返回逻辑真,即1,否则,返回逻辑假,即0。

    s.length(); 
    s.empty();
    

替换string对象的字符

  • 使用replace()方法可以很方便地替换string对象中的字符

    string s;
    s="abc123456";
    //从第3个开始,将连续的3个字符替换为“good”
    //即将“123”替换为“good”
    s.replace(3,3, "good");
    

搜索string对象的元素或子串

  • 采用find()方法可查找字符串中的第一个字符元素(char,用单引号界定)或者子串(用双引号界定),如果查到,则返回下标值(从0开始计数),如果查不到,则返回4294967295(一个很大的数)。

    string s;
    s="cat dog cat";
    //查找第一个字符‘c',返回下标值
    s.find('c');
    //查找第一个子串“c”,返回下标值
    s.find("c");
    

string对象的比较

  • string对象可与使用compare()方法与其他字符串相比较。如果它比对方大,则返回1;如果它比对方小,则返回-1;如果它与对方相同(相等),则返回0。

    s.compare("cat")
    

用reverse反向排序string对象

  • 采用reverse()方法可将string对象迭代器所指向的一段区间中的元素(字符)反向排序。

  • 声明头文件“#include ”

    reverse(s.begin(), s.end());
    

string对象作为vector元素

  • 类似于字符串数组

    vector<string> v;
    

string类型的数字化处理

  • 将读入的数字的每位分离出来,如果采用取余的方法,花费的时间就会太长,这时候,我们可以将读入的数据当成字符串来处理。

    //计算输入整数数据的每位的和 
      string s;
      cin>>s;
      int num;
      for(int i=0;i<s.length();i++){
      	num+=s[i]-48; 
      } 
      cout<<s<<endl;
      cout<<"sum:"<<num<<endl; 
    

string对象与字符数组互操作

  • 字符数组ss赋值线字符串对象s

     s=ss;
    
  • 采用c_str()方法

    s.c_str();
    
    • c_str()函数声明: const char* c_str();

    • c_str()函数返回一个指向c字符串的指针,内容与本string串相同。

    • c中没有string类型,必须通过string类对象成员函数c_str()把string对象转换成c中的字符串。

    • 要通过strcpy()函数等来操作c_str()返回的指针。

      strcpy(c,s.c_str());
      
    • c_str()返回的是一个分配给const char*的地址,其内容已经设定为不可变更,如果把此地址赋给一个变更内容的char*变量,就会冲突。

    //使用printf()不需要格式控制字符串,也可以直接输出目标字符串
    char a[10]="aaaa";
    printf(a);
    

string对象与sscanf函数

  • sscanf函数,可以把一个字符串按需要的方式分离出子串,甚至是数字。

    //将字符串分离成子串,分隔符为空格,分割后的子字符数组,可以赋值给string容器对象
    sscanf("abc 123 pc", "%s %s %s", sa, sb, sc);
    
    //将字符串分离成数字,分隔符为空格
    //当用到数字的时候,跟scanf一样,它要传指针地址
    int a, b, c;
    sscanf("1 2 3", "%d %d %d", &a, &b, &c);
    
    //将字符串分离成数字,分隔符为“,”和“$”
    //当用到数字的时候,跟scanf一样,它要传指针地址
    int x, y, z;
     sscanf("4,5$6", "%d, %d$%d", &x, &y, &z);
    

string对象与数值相互转换

  • 将数值转换为string的第一种方法sprintf()

    char a[10];
    string s;
    sprintf(a, "%d",1975);
    //赋值给string对象
    s=a;
    cout<<s<<endl;
    
  • C++方法:将数值转换为string

    使用ostringstream、istringstream类要包含头文件

    string convertToString(double x)
    {
     	ostringstream o;
        if (o << x)
    		return o.str();
    	return "conversion error"; //if error
    }
    
    //C++方法:将string转换为数值
    double convertFromString(const string &s)
    {
    	istringstream i(s);
     	double x;
    	if (i >> x)
    		 return x;
    	return 0.0; //if error
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暴风雨中的白杨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值