C++中string的用法总结

在写Leetcode的第38题时,用到了string变量的用法,感觉这个还是挺方便的,总结下他的用法

1.声明C++字符串

     1)string str;//生成一个空字符串

     2)  string str(str1),//拷贝构造函数,生成str1的复制品

     3)string str(str,stridx)//将字符串str1内“始于位置stridx”的部分当作字符串的初值

   4) string s(cstr) //将C字符串作为s的初值 
    5) string s(chars,chars_len) //将C字符串前chars_len个字符作为字符串s的初值。 
   6) string s(num,c) //生成一个字符串,包含num个c字符 
   7) string s(beg,end) //以区间beg;end(不包含end)内的字符作为字符串s的初值 
   8) s.~string() //销毁所有字符,释放内存 

--------------------------------------------------------------------------

2.字符串操作函数

a) =,assign() //赋以新值 
b) swap() //交换两个字符串的内容 
c) +=,append(),push_back() //在尾部添加字符 
d) insert() //插入字符 
e) erase() //删除字符 
f) clear() //删除全部字符 
g) replace() //替换字符 
h) + //串联字符串 
i) ==,!=,<,<=,>,>=,compare() //比较字符串 
j) size(),length() //返回字符数量 
k) max_size() //返回字符的可能最大个数 
l) empty() //判断字符串是否为空 
m) capacity() //返回重新分配之前的字符容量 
n) reserve() //保留一定量内存以容纳一定数量的字符 
o) [ ], at() //存取单一字符 
p) >>,getline() //从stream读取某值 
q) << //将谋值写入stream 
r) copy() //将某值赋值为一个C_string 
s) c_str() //将内容以C_string返回 
t) data() //将内容以字符数组形式返回 
u) substr() //返回某个子字符串 
v)查找函数 
w)begin() end() //提供类似STL的迭代器支持 
x) rbegin() rend() //逆向迭代器 
y) get_allocator() //返回配置器 

----------------------------------------------------------

3.字符串更改内容

s.assign(str); //不说 
s.assign(str,1,3);//如果str是"iamangel" 就是把"ama"赋给字符串 
s.assign(str,2,string::npos);//把字符串str从索引值2开始到结尾赋给s 
s.assign("gaint"); //不说 
s.assign("nico",5);//把’n’ ‘I’ ‘c’ ‘o’ ‘\0’赋给字符串 
s.assign(5,’x’);//把五个x赋给字符串 
把字符串清空的方法有三个:s="";s.clear();s.erase();(我越来越觉得举例比说话让别人容易懂!)。 
string提供了很多函数用于插入(insert)、删除(erase)、替换(replace)、增加字符。 
先说增加字符(这里说的增加是在尾巴上),函数有 +=、append()、push_back()。举例如下: 
s+=str;//加个字符串 
s+="my name is jiayp";//加个C字符串 
s+=’a’;//加个字符 

s.append(str); 
s.append(str,1,3);//不解释了 同前面的函数参数assign的解释 
s.append(str,2,string::npos)//不解释了 

s.append("my name is jiayp"); 
s.append("nico",5); 
s.append(5,’x’); 

s.push_back(‘a’);//这个函数只能增加单个字符 对STL熟悉的理解起来很简单 

也许你需要在string中间的某个位置插入字符串,这时候你可以用insert()函数,这个函数需要你指定一个安插位置的索引,被插入的字符串将放在这个索引的后面。 

s.insert(0,"my name"); 
s.insert(1,str); 
这 种形式的insert()函数不支持传入单个字符,这时的单个字符必须写成字符串形式(让人恶心)。既然你觉得恶心,那就不得不继续读下面一段话:为了插 
入单个字符,insert()函数提供了两个对插入单个字符操作的重载函数:insert(size_type index,size_type num,chart 
c)和insert(iterator pos,size_type num,chart 
c)。其中size_type是无符号整数,iterator是char*,所以,你这么调用insert函数是不行的:insert(0,1, 
’j’);这时候第一个参数将转换成哪一个呢?所以你必须这么写:insert((string::size_type)0,1,’j’)!第二种形式指 
出了使用迭代器安插字符的形式,在后面会提及。顺便提一下,string有很多操作是使用STL的迭代器的,他也尽量做得和STL靠近。 
删除函数erase()的形式也有好几种(真烦!),替换函数replace()也有好几个。举例吧: 
string s="il8n"; 
s.replace(1,2,"nternationalizatio");//从索引1开始的2个替换成后面的C_string 
s.erase(13);//从索引13开始往后全删除 
s.erase(7,5);//从索引7开始往后删5个 
----------------------------------------------------------------------------------
4.提取子串和字符串连接 
题取子串的函数是:substr(),形式如下: 
s.substr();//返回s的全部内容 
s.substr(11);//从索引11往后的子串 
s.substr(5,6);//从索引5开始6个字符 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值