C++编程思想第二版第二卷读书笔记2——深入学习string类

本文详细介绍了C++中字符串的各种初始化方法及常用操作,包括获取字符串长度、改变字符串容量、字符串连接、插入与替换字符、查找子串等功能,并解释了不同方法的应用场景。
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style=""><span style="font-size: small;">初始化:</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 10.5pt;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">string imBlank;//</span></span><span style="">无内容</span><span lang="EN-US"><span style="font-family: Calibri;">string</span></span><span style="">,长度为零</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;"><span style=""> </span>string heyMom("Where are my socks?");//</span></span><span style="">内含字符串</span><span lang="EN-US"><span style="font-family: Calibri;">Where are my socks?</span></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><span style="font-size: small;"><span style="font-family: Calibri;"><span style=""> </span>string standardReply = "Beamed into deep "</span></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 20.25pt;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">"space on wide angle dispersion?"; /*</span></span><span style="">内含字符串</span><span lang="EN-US"><span style="font-family: Calibri;">Beamed into deep space on wide angle </span></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 168pt; text-indent: 21pt;"><span lang="EN-US"><span style="font-size: small;"><span style="font-family: Calibri;">dispersion?*/</span></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;"><span style=""> </span>string useThisOneAgain(standardReply);//</span></span><span style="">以</span><span lang="EN-US"><span style="font-family: Calibri;">standardReply</span></span><span style="">内字符串初始化</span><span lang="EN-US"><span style="font-family: Calibri;">useThisOneAgain</span></span><span style="">。</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">string s4(s1, 0, 8);//</span></span><span style="">用</span><span lang="EN-US"><span style="font-family: Calibri;">s1</span></span><span style="">串中第一个到第八个字符初始化</span><span lang="EN-US"><span style="font-family: Calibri;">s4</span></span><span style="">。</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">s1.substr(20, 10);//</span></span><span style="">取第</span><span lang="EN-US"><span style="font-family: Calibri;">21</span></span><span style="">(索引为</span><span lang="EN-US"><span style="font-family: Calibri;">20</span></span><span style="">)到第</span><span lang="EN-US"><span style="font-family: Calibri;">31</span></span><span style="">个字符的子串(长度</span><span lang="EN-US"><span style="font-family: Calibri;">10</span></span><span style="">)。</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">string s(source.begin(), source.end());//</span></span><span style="">用串</span><span lang="EN-US"><span style="font-family: Calibri;">source</span></span><span style="">初始化</span><span lang="EN-US"><span style="font-family: Calibri;">s</span></span><span style="">串。</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">string okay(5, 'a');//</span></span><span style="">以</span><span lang="EN-US"><span style="font-family: Calibri;">”aaaaa”</span></span><span style="">初始化</span><span lang="EN-US"><span style="font-family: Calibri;">okay</span></span><span style="">。</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style=""><span style="font-size: small;">操作:</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">bigNews.size();//</span></span><span style="">取得串</span><span lang="EN-US"><span style="font-family: Calibri;">bigNews</span></span><span style="">的长度(即所含字符数)。</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">bigNews.capacity();//</span></span><span style="">取得</span><span lang="EN-US"><span style="font-family: Calibri;">bigNews</span></span><span style="">的容量,即当前已经分配给它的内存大小。</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">bigNews.reserve(500);//</span></span><span style="">将</span><span lang="EN-US"><span style="font-family: Calibri;">bigNews</span></span><span style="">的容量设置为</span><span lang="EN-US"><span style="font-family: Calibri;">500</span></span><span style="">。</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">bigNews.append("I've been working too hard.");//</span></span><span style="">将</span><span lang="EN-US"><span style="font-family: Calibri;">I've been working too hard.</span></span><span style="">添加到</span><span lang="EN-US"><span style="font-family: Calibri;">bigNews</span></span><span style="">的尾部,相当于</span><span lang="EN-US"><span style="font-family: Calibri;">bigNews += I've been working too hard.</span></span><span style="">。</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="">替换</span><span lang="EN-US"><span style="font-family: Calibri;">string</span></span><span style="">中的字符:</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">s.insert(8, tag + ' ');//</span></span><span style="">在串</span><span lang="EN-US"><span style="font-family: Calibri;">s</span></span><span style="">的第</span><span lang="EN-US"><span style="font-family: Calibri;">9</span></span><span style="">个字符位置插入字符串</span><span lang="EN-US"><span style="font-family: Calibri;">tag</span></span><span style="">和一个空格。</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">s.replace(1, 3, "hello there");//</span></span><span style="">从第二个字符开始,用</span><span lang="EN-US"><span style="font-family: Calibri;">hello there</span></span><span style="">替换掉</span><span lang="EN-US"><span style="font-family: Calibri;">3</span></span><span style="">长度的字符(例如本来</span><span lang="EN-US"><span style="font-family: Calibri;">s=”12345678”</span></span><span style="">,刚结果变成</span><span lang="EN-US"><span style="font-family: Calibri;">s=”1hello there5678”</span></span><span style="">)。</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">modifyMe.find(findMe, 0);//</span></span><span style="">在字符串的第一个字符开始查找第一个与字符串</span><span lang="EN-US"><span style="font-family: Calibri;">findMe</span></span><span style="">相匹配的子串。</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">string a = “axbde”;char b = a[1];</span></span><span style="font-family: Wingdings;" lang="EN-US"><span style="">ó</span></span><span lang="EN-US"><span style="font-family: Calibri;">char c = a.at(1)//b</span></span><span style="">和</span><span lang="EN-US"><span style="font-family: Calibri;">c</span></span><span style="">的值都为</span><span lang="EN-US"><span style="font-family: Calibri;">’x’</span></span><span style="">,但当</span><span lang="EN-US"><span style="font-family: Calibri;">[]</span></span><span style="">方法越界时程序表现不出异常,而</span><span lang="EN-US"><span style="font-family: Calibri;">at()</span></span><span style="">方法在越界时会抛出异常。</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">string</span></span><span style="">查找函数:</span><span lang="EN-US"><span style="font-family: Calibri;"> </span></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><span style="font-size: small;"><span style="font-family: Calibri;"><span style=""></span>find( )</span></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span lang="EN-US"><span style=""><span style="font-family: Calibri;"></span></span></span><span style="">查找一个指定的字符(字符组合),返回找到该字符(字符组合)的第一个匹配字符(字符串)的(起始)坐标或在未找到时返回</span><span lang="EN-US"><span style="font-family: Calibri;">npos</span></span><span style="">。</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><span style="font-size: small;"><span style="font-family: Calibri;"><span style=""></span>find_first_of( )</span></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span lang="EN-US"><span style=""><span style="font-family: Calibri;"></span></span></span><span style="">查找指定字符串,返回该字符串的第一个匹配子串的起始坐标或在未找到时返回</span><span lang="EN-US"><span style="font-family: Calibri;">npos</span></span><span style="">。</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><span style="font-size: small;"><span style="font-family: Calibri;"><span style=""></span>find_last_of( )</span></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 5.25pt;"><span style="font-size: small;"><span style="">查找指定字符串,返回该字符串的最后一个匹配子串的起始坐标或在未找到时返回</span><span lang="EN-US"><span style="font-family: Calibri;">npos</span></span><span style="">。</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><span style="font-size: small;"><span style="font-family: Calibri;"><span style=""></span><span style=""></span>find_first_not_of( )</span></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 5.25pt;"><span style="font-size: small;"><span style="">查找不含指定字符串中任何字符的第一个匹配位置,返回其坐标或在未找到时返回</span><span lang="EN-US"><span style="font-family: Calibri;">npos</span></span><span style="">。</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><span style="font-size: small;"><span style="font-family: Calibri;"><span style=""></span>find_last_not_of( )</span></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 5.25pt;"><span style="font-size: small;"><span style="">查找不含指定字符串中任何字符的最后一个匹配位置,返回其坐标或在未找到时返回</span><span lang="EN-US"><span style="font-family: Calibri;">npos</span></span><span style="">。</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><span style="font-size: small;"><span style="font-family: Calibri;"><span style=""></span>rfind( )</span></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 5.25pt;"><span style="font-size: small;"><span style="">反向(从右往左)查找一个指定的字符(字符组合),返回找到该字符(字符组合)的第一个匹配字符(字符串)的(起始)坐标或在未找到时返回</span><span lang="EN-US"><span style="font-family: Calibri;">npos</span></span><span style="">。</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 5.25pt;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">string</span></span><span style="">成员函数</span><span lang="EN-US"><span style="font-family: Calibri;">erase()</span></span><span style="">的用法如下:(假设有</span><span lang="EN-US"><span style="font-family: Calibri;">string a;</span></span><span style="">)</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">a.erase(pos,n); </span></span><span style="">删除从</span><span lang="EN-US"><span style="font-family: Calibri;">pos</span></span><span style="">开始的</span><span lang="EN-US"><span style="font-family: Calibri;">n</span></span><span style="">个字符,比如</span><span lang="EN-US"><span style="font-family: Calibri;">erase(0,1)</span></span><span style="">就是删除第一个字符</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">a.erase(position);</span></span><span style="">删除</span><span lang="EN-US"><span style="font-family: Calibri;">position</span></span><span style="">处的一个字符</span><span lang="EN-US"><span style="font-family: Calibri;">(position</span></span><span style="">是个</span><span lang="EN-US"><span style="font-family: Calibri;">string</span></span><span style="">类型的迭代器</span><span lang="EN-US"><span style="font-family: Calibri;">)</span></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">a.erase(first,last);</span></span><span style="">删除从</span><span lang="EN-US"><span style="font-family: Calibri;">first</span></span><span style="">到</span><span lang="EN-US"><span style="font-family: Calibri;">last</span></span><span style="">之间的字符(</span><span lang="EN-US"><span style="font-family: Calibri;">first</span></span><span style="">和</span><span lang="EN-US"><span style="font-family: Calibri;">last</span></span><span style="">都是迭代器)</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="">成员比较函数</span><span lang="EN-US"><span style="font-family: Calibri;">a.compare(string);//</span></span><span style="">比较串</span><span lang="EN-US"><span style="font-family: Calibri;">a</span></span><span style="">与串</span><span lang="EN-US"><span style="font-family: Calibri;">compare</span></span><span style="">是否相等。</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="">重写</span><span lang="EN-US"><span style="font-family: Calibri;">char_traits<char></span></span><span style="">可以使</span><span lang="EN-US"><span style="font-family: Calibri;">string</span></span><span style="">比较时不区分大小写(大小写不敏感)。</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">16</span></span><span style="">位字符这里就不详述了。</span></span></p>
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值