C++STL之string类的使用

使用 string 类的头文件:#include<string>,不是#include<string.h>,后面有.h的是C语言的库。

string 也是 STL标准库中的一个容器。

1.string的构造:                                                                                                               

string  str;

string str = “hello world”;

都是正确的写法。


2.string特性返回和修改:                                                                                                

如有:

string str;

1.int  size()const  :返回当前字符串的大小

int size = str.size();

2.int  length()const :返回当前字符串的长度

int len = str.length();


3.bool  empty()const :判断字符串是否为空

if(str.empty())


4.void  resize(size_t n,char c);或void  resize(size_t n):重置字符串大小

前者可以重置字符串大小,且多出来的用字符串char c来补充。

#include <iostream>
#include <string>

int main ()
{
  std::string str ("I like to code in C");
  std::cout << str << '\n';

  unsigned sz = str.size();

  str.resize (sz+2,'+');
  std::cout << str << '\n';

  str.resize (14);
  std::cout << str << '\n';
  return 0;
}

输出:

I like to code in C
I like to code in C++
I like to code


3.string字符串字符操作:                                                                                                

1.char &at(size_t  n):返回字符串string str 的n位置的字符。(0<=n < str.length())

string str="hello";
cout<<str.at(1)<<endl;//打印:e

2.char & operator[ ](int n)const:返回字符串string str 的n位置的字符,但与 at()相比,at会提供越界检查,越界时会抛出错误。而这种方法则不会。

string str=“hello”;
cout<<str[1]<<endl;//打印e

3. int  copy(char* s,size_t  len,size_t  pos = 0)const;

string 字符串从pos位置(默认值为0)起始,复制 len 个字符到,char型数组中,注意一定是char 数组,不是string,因为函数第一个参数已经规定。

返回实际成功复制的字符个数。

char s[20];
  std::string str ("Test string...");
  std::size_t length = str.copy(s,6,5);
  s[length]='\0';
  std::cout  << s << '\n';
打印:string

4.string的输入输出:                                                                                                       

string 类重载了operator>>用于标准输入,同样重载了operator<<用于标准输出。所以有:

cin>>str;//从键盘输入
cout<<str;//输出屏幕

5.string类迭代器的使用

迭代器跟指针用法十分相似。

string str="hello";
string::iterator iter;    //定义一个string容器的迭代器iter
iter = str.begin();       //迭代器指向string字符串str的第一个元素,即‘h’
iter = str.end();        //迭代器指向str最后一个元素的后一个位置。当iter=str.end()表示访问str完成
也可以通过迭代器对string中的元素(即string字符串中的字符)进行操作,如把字符串 str 中的字符全改成a
string str="hello";
string::iterator iter = str.begin();
for(iter;iter!=str.end();iter++)
{
     *iter = 'a';
}
*iter 表示取 iter 迭代器指向的元素。



5.string类的连接                                                                                                               

1.string &operator+=(const string &s)     //把字符串s连接在字符串的末尾

 string a="hello";
  string b=" world";
  a+=b;
  cout<<a<<endl; //print:hello world

2.string str.append(const char *s)   //把char *c字符串连接在 string 字符串后

string str="hi,";
char s[]="hello";
str.append(s);  //str=“hi,hello”

3.string str.append(const char*s,int  n)      //从char *c字符串中提取前n个字符,连接在string 字符串后

string str="hi,";
  char s[]="hello";
  str.append(s,2);         //str=“hi,he”


6.string类的删除操作:erase                                                                                          

1.删除一段区间---迭代器标识:

	string str="abcdefg";
	string::iterator iter1,iter2;  //定义两个迭代器 
	iter1 = find(str.begin(),str.end(),'d'); //返回str中d位置 
	iter2 = str.erase(str.begin(),iter1);  //删除从str第一个元素到‘d’位置前的字符 
	cout<<str<<endl;    //打印结果:defg 

2.删除一段区间---位置标识:

	string str="abcdefg";
	str.erase(0,5);		//从位置0开始删除,删除5个字符 
	cout<<str<<endl;    //打印结果:fg 

3.删除想删除的字符:

	string str="abcdabcdabcdabcd";
	string::iterator iter;
	for(iter=str.begin();iter!=str.end();iter++)
	{
		if(*iter =='a')
		{
			str.erase(iter);
		}
	}
	cout<<str<<endl;//打印结果:bcdbcdbcdbcd


7.string类的替换                                                                                                               

string &replace(int pos, int  n , const string& str);// 从string型字符串str 的 pos位置起,删除 n 个字符,再在pos位置插入string型字符串 str;

string &replace(int  pos, int  n ,const char *  s); // 从string型字符串str 的 pos位置起,删除 n 个字符,再在pos位置插入字符型字符串 s;

	string str1="hello,jack!";
	string str2="andy";
	str1.replace(6,4,str2);
	cout<<str1<<endl;   //打印:hello,andy! 
string &replace(int pos1,int  n1,const &string  s,int  pos2,int  n2);//从string字符串的pos1位置开始,删除n1个字符,再插入从string字符串s的pos2位置起,n2个长度的子字符串

	string str1="hello,jack!";
	string str2="hello,andy!";
	string str3;
	str3=str1.replace(6,4,str2,6,4);//把str1的jack先删除,再插入str2的andy 
	cout<<str3<<endl;   //打印:hello,andy! 


8.string类的插入                                                                                                               

string &insert(int p0, const char *s);
string &insert(int p0, const char *s, int n);
string &insert(int p0,const string &s);
string &insert(int p0,const string &s, int pos, int n);
//前4个函数在p0位置插入字符串s中pos开始的前n个字符

	string str1="china,guangzhou";
	string str2="guangdong,";
	string str3;
	str3 = str1.insert(6,str2);
	cout<<str3<<endl;

string &insert(int p0, int n, char c);//此函数在p0处插入n个字符c

iterator insert(iterator it, char c);//在it处插入字符c,返回插入后迭代器的位置

	string str1="china,guangzhou";
	string::iterator iter;
	string str2 = ",guangdong";
	iter = find(str1.begin(),str1.end(),',');
	iter=str1.insert(iter,'A');
	cout<<str1<<endl;  //打印:chinaA,guangzhou 
  	cout<<*iter<<endl; //打印:A 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值