春源 發表於 2025-12-15 10:39:51

c++的字符串string基本操作大全

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li>string的概念</li><li>string的基本操作</li><ul class="second_class_ul"><li>创建</li><li>输入</li><li>获取长度</li><li>迭代器</li><ul class="third_class_ul"><li>begin()和end()</li></ul><li>尾插函数</li><ul class="third_class_ul"></ul><li>+=和+运算</li><ul class="third_class_ul"></ul><li>尾删pop_back()</li><ul class="third_class_ul"></ul><li>insert()插入</li><ul class="third_class_ul"></ul><li>find查找</li><ul class="third_class_ul"></ul><li>substr()</li><ul class="third_class_ul"></ul><li>关系运算</li><ul class="third_class_ul"></ul><li>字符串和int 值的转换。</li><ul class="third_class_ul"></ul><li>反转字符串</li><ul class="third_class_ul"></ul></ul></ul></div><p class="maodian"></p><h2>string的概念</h2>
<p>string是c++专门创建的字符串类型,为了方便操作字符串。</p>
<p>string中很多的方法。</p>
<p class="maodian"></p><h2>string的基本操作</h2>
<p>首先要包含头文件string.</p>
<p class="maodian"></p><h3>创建</h3>
<p>有初始化的创建,它的末尾不以&#39;\0&#39;为结尾。</p>
<div class="jb51code"><pre class="brush:cpp;">#include &lt;iostream&gt;
#include&lt;string&gt;
using namespace std;
int main() {
        string a="hello world";
    //string a("hello world");
        cout&lt;&lt;a;
        return 0;
}</pre></div>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025121510382730.png" /></p>
<p>string可以直接赋值</p>
<div class="jb51code"><pre class="brush:cpp;">#include &lt;iostream&gt;
#include&lt;string&gt;
using namespace std;
int main() {
        string a;
        string b("hello world");
        a=b;
        cout&lt;&lt;a;
        return 0;
}</pre></div>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025121510382766.png" /></p>
<p class="maodian"></p><h3>输入</h3>
<p>cin输入,不能输入空格</p>
<div class="jb51code"><pre class="brush:cpp;">#include &lt;iostream&gt;
#include&lt;string&gt;
using namespace std;
int main() {
        string a;
        cin&gt;&gt;a;
        cout&lt;&lt;a;
        return 0;
}</pre></div>
<p>getline是c++标准函数,读取一行文本存储为字符。</p>
<p>istream&amp;getline(istream&amp; is,string&amp;str);遇到&#39;\n&#39;停止。</p>
<div class="jb51code"><pre class="brush:cpp;">#include &lt;iostream&gt;
#include&lt;string&gt;
using namespace std;
int main() {
        string a;
        getline(cin,a);
        cout&lt;&lt;a;
        return 0;
}</pre></div>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025121510382781.png" /></p>
<p>istream&amp;getline(istream&amp; is,string&amp;str,char delim);直到遇到delim字符停止</p>
<div class="jb51code"><pre class="brush:cpp;">#include &lt;iostream&gt;
#include&lt;string&gt;
using namespace std;
int main() {
        string a;
        getline(cin,a,'m');//读到m停止
        cout&lt;&lt;a;
        return 0;
}</pre></div>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025121510382817.png" /></p>
<p class="maodian"></p><h3>获取长度</h3>
<p>size(),string有很多函数,用 . 使用</p>
<div class="jb51code"><pre class="brush:cpp;">#include &lt;iostream&gt;
#include&lt;string&gt;
using namespace std;
int main() {
        string b;
        string a="abcd";
        string c="abcdefg";
        string d="j k l l l";
        cout&lt;&lt;a.size()&lt;&lt;endl;
        cout&lt;&lt;b.size()&lt;&lt;endl;
        cout&lt;&lt;c.size()&lt;&lt;endl;
        cout&lt;&lt;d.size()&lt;&lt;endl;
        return 0;
}</pre></div>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025121510382813.png" /></p>
<p>string的数据也有下标和正常创建的字符数组一样从0开始。</p>
<p class="maodian"></p><h3>迭代器</h3>
<p>用来遍历容器元素。</p>
<p>iterator类似指针,数组下标。</p>
<p>需要*解引用。</p>
<p class="maodian"></p><h4>begin()和end()</h4>
<p>begin()指向第一个位置,end()指向最后的下一个位置,不存在于字符串。</p>
<p>可以比较大小,加减。</p>
<div class="jb51code"><pre class="brush:cpp;">#include &lt;iostream&gt;
#include&lt;string&gt;
using namespace std;
int main() {
        string a="hello world";
        string::iterator it1=a.begin();
        string::iterator it2=a.end();
        if(it1&lt;it2)
                cout&lt;&lt;"&lt;"&lt;&lt;endl;
        else
                cout&lt;&lt;"&gt;"&lt;&lt;endl;
        return 0;
}</pre></div>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025121510382852.png" /></p>
<p>可以通过*解引用,输出存储的字符。</p>
<div class="jb51code"><pre class="brush:cpp;">#include &lt;iostream&gt;
#include&lt;string&gt;
using namespace std;
int main() {
        string a="hello world";
        string::iterator it1=a.begin();
        string::iterator it2=a.end();
        cout&lt;&lt;*it1&lt;&lt;endl;//
        it1++;
        cout&lt;&lt;*it1&lt;&lt;endl;//
        it1--;
        cout&lt;&lt;*it1&lt;&lt;endl;//
        return 0;
}</pre></div>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025121510382842.png" /></p>
<p>使用迭代器遍历。</p>
<div class="jb51code"><pre class="brush:cpp;">#include &lt;iostream&gt;
#include&lt;string&gt;
using namespace std;
int main() {
        string a="abcdef";
        string::iterator it1=a.begin();
        string::iterator it2=a.end();
        for (string::iterator i = a.begin(); i != a.end(); ++i) {
      cout &lt;&lt; *i;
    }
        cout&lt;&lt;endl;
        for(auto i=it2-1;i&gt;=it1;--i){
                cout&lt;&lt;*i;
        }
        return 0;
}</pre></div>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025121510382822.png" /></p>
<p>还有反向迭代器,reverse_iterator&nbsp; 类型的rbegin(),rend()刚好相反。</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025121510382988.png" /></p>
<p class="maodian"></p><h3>尾插函数</h3>
<p>a.push_back();在字符串尾部插入字符</p>
<div class="jb51code"><pre class="brush:cpp;">#include &lt;iostream&gt;
#include&lt;string&gt;
using namespace std;
int main() {
        string a="abcdef";
        cout&lt;&lt;a&lt;&lt;endl;
        a.push_back('g');
        cout&lt;&lt;a&lt;&lt;endl;
        return 0;
}
</pre></div>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025121510382985.png" /></p>
<p class="maodian"></p><h3>+=和+运算</h3>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025121510382947.png" /></p>
<p>也可以头部拼接。</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025121510382928.png" /></p>
<p class="maodian"></p><h3>尾删pop_back()</h3>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025121510382912.png" /></p>
<p>空的情况下删除会报错。</p>
<p class="maodian"></p><h3>insert()插入</h3>
<p>a.insert(pos&nbsp; ,&nbsp; str),在a字符串中的pos位置前插入,str字符串。str可以是string类型的内容,可以是字符串如下图。</p>
<p>a.insert(pos,n,str)插入n个str的字符到pos前。</p>
<div class="jb51code"><pre class="brush:cpp;">#include &lt;iostream&gt;
#include&lt;string&gt;
using namespace std;
int main() {
        string a="abcdef";
        cout&lt;&lt;a&lt;&lt;endl;
        a.insert(3,"6");
        cout&lt;&lt;a&lt;&lt;endl;
        return 0;
}</pre></div>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025121510382956.png" /></p>
<p class="maodian"></p><h3>find查找</h3>
<p>a.find()返回第一次出现的位置。它的返回值是size_t,相当于下标</p>
<p>a.find(str,位置(默认0))</p>
<div class="jb51code"><pre class="brush:cpp;">#include &lt;iostream&gt;
#include&lt;string&gt;
using namespace std;
int main() {
        string a="abcdef abc def l g k";
        string b="de";
        string c="l";
        size_t t=a.find(b);
        cout&lt;&lt;t&lt;&lt;endl;
        cout&lt;&lt;a.find(b,t+1)&lt;&lt;endl;
        return 0;
}</pre></div>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025121510383022.png" /></p>
<p>a.find(char*,size_t&nbsp; pos);</p>
<p>可以查找c风格的字符串。</p>
<p>a.find(str,size_t pos ,n)a字符串中查找str前n给字符</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025121510382954.png" /></p>
<p>也可以找字符。str</p>
<p>找不到会放回-1;无符号整型的-1。2^32-1;</p>
<p class="maodian"></p><h3>substr()</h3>
<p>a.substr(pos,len=npos);pos截取的开始,npos截取的长度。pos默认为0,npos默认到字符串末尾</p>
<p>的长度。</p>
<p>用于截取a字符串pos位置开始n个的字符。</p>
<div class="jb51code"><pre class="brush:cpp;">#include &lt;iostream&gt;
#include&lt;string&gt;
using namespace std;
int main() {
        string a="abcdefghi";
        string b=a.substr(3,3);
        string c=a.substr(3);
        cout&lt;&lt;b&lt;&lt;endl;
        cout&lt;&lt;c&lt;&lt;endl;
        return 0;
}</pre></div>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025121510383040.png" /></p>
<p class="maodian"></p><h3>关系运算</h3>
<p>==,至少有一个str的字符才可以比较,比较的ascii值对应位置。</p>
<div class="jb51code"><pre class="brush:cpp;">#include &lt;iostream&gt;
#include&lt;string&gt;
using namespace std;
int main() {
        string a="abcdefghi";
        string b="abcdefghi";
        if(a==b)
                cout&lt;&lt;"=="&lt;&lt;endl;
        string c="abcdefgh";
        if(a!=c)
                cout&lt;&lt;"!="&lt;&lt;endl;
        string d="b";
        if(a&lt;d)
                cout&lt;&lt;"&lt;"&lt;&lt;endl;
        string e="aa";
        if(a&gt;e)
                cout&lt;&lt;"&gt;"&lt;&lt;endl;
        return 0;
}</pre></div>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025121510383035.png" /></p>
<p class="maodian"></p><h3>字符串和int 值的转换。</h3>
<p>stoi/stol,stol是int ,stol是long int。</p>
<p>int stoi(str,size_t* idx=0,int base=0)</p>
<p>long stol(str,size_t* idx=0,int base=0)</p>
<p>str是string类型的字符串。</p>
<p>idx是一个指针,从idx位置开始到第一个无法匹配的下标返回</p>
<p>如&ldquo;123q&rdquo;返回q的位置</p>
<p>base表示被解析的数字的进制,</p>
<p>2表示被解析的数字当作2进制数字,转化为10进制。</p>
<p>0是自动推到如0x是16,0是8;</p>
<div class="jb51code"><pre class="brush:cpp;">#include &lt;iostream&gt;
#include&lt;string&gt;
using namespace std;
int main() {
        string a="123p";
        size_t t=0;
        int b=stoi(a,&amp;t,10);
        int c=stoi(a,&amp;t,8);
        cout&lt;&lt;b&lt;&lt;endl;
        cout&lt;&lt;c&lt;&lt;endl;
        return 0;
}</pre></div>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025121510383040.png" /></p>
<p>stod转化为double,stof转化为float</p>
<p>stod(str,size_t* idx);只有10进制。</p>
<p>stof(str,size_t* idx);</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025121510383034.png" /></p>
<p>to_string</p>
<p>把数字转换为字符串。</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025121510383048.png" /></p>
<p class="maodian"></p><h3>反转字符串</h3>
<p>reverse要包含头文件algorithm.</p>
<p>reverse(首元素的地址,反转范围末尾的下一个元素)。</p>
<div class="jb51code"><pre class="brush:cpp;">#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;cstdio&gt;
#include &lt;algorithm&gt;
using namespace std;
int main() {
    string str;
    cin&gt;&gt;str;
        reverse(str.begin(),str.end());
        cout&lt;&lt;str;
    return 0;
}</pre></div>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025121510383030.png" /></p>
<p>到此这篇关于c++的字符串string基本操作大全的文章就介绍到这了,更多相关c++字符串string内容请搜索琼殿技术社区以前的文章或继续浏览下面的相关文章希望大家以后多多支持琼殿技术社区!</p>
                           
                            <div class="art_xg">
                              <b>您可能感兴趣的文章:</b><ul><li>C++&nbsp;string字符串的使用和简单模拟实现</li><li>C++如何比较两个字符串或string是否相等strcmp()和compare()</li><li>c++string字符串的比较是否相等问题</li><li>C++:string字符串的切片方式</li><li>C#与C++ dll之间传递字符串string wchar_t* char* IntPtr问题</li><li>C++中的数字转字符串to_string</li><li>C++中string字符串分割函数split()的4种实现方法</li><li>C++ string字符串的修改与替换方法详析</li><li>C++ 字符串string和整数int的互相转化操作</li></ul>
                            </div>

                        </div>
                        <!--endmain-->
頁: [1]
查看完整版本: c++的字符串string基本操作大全