详解C++中string的用法和例子分享!

string是C++标准库的一个重要的部分,主要用于字符串处理。可以使用输入输出流方式直接进行操作,也可以通过文件等手段进行操作。同时C++的算法库对string也有着很好的支持,而且string还和c语言的字符串之间有着良好的接口。虽然也有一些弊端,但是瑕不掩瑜。

其中使用的代码多数都是来自cpp官网,因为例子非常全。

声明和初始化方法:

想使用string首先要在头文件当中加入< string >
声明方式也很简单

声明:

  string s;//声明一个string 对象  string ss[10];//声明一个string对象的数组

初始化:

使用等号的初始化叫做拷贝初始化,不使用等号的初始化叫做直接初始化。

  #include <bits/stdc++.h>  using namespace std;  int main()  {   ios::sync_with_stdio(false);   string s;//默认初始化,一个空字符串   string s1("ssss");//s1是字面值“ssss”的副本   string s2(s1);//s2是s1的副本   string s3=s2;//s3是s2的副本   string s4(10,'c');//把s4初始化   string s5="hiya";//拷贝初始化   string s6=string(10,'c');//拷贝初始化,生成一个初始化好的对象,拷贝给s6   //string s(cp,n)   char cs[]="12345";   string s7(cs,3);//复制字符串cs的前3个字符到s当中   //string s(s2,pos2)   string s8="asac";   string s9(s8,2);//从s2的第二个字符开始拷贝,不能超过s2的size   //string s(s2,pos2,len2)   string s10="qweqweqweq";   string s11(s10,3,4);//s4是s3从下标3开始4个字符的拷贝,超过s3.size出现未定义   return 0;  }

字符串处理:

substr操作:

注意substr没有迭代器作为参数的操作

  #include <bits/stdc++.h>  using namespace std;  int main()  {   ios::sync_with_stdio(false);   string s="abcdefg";   //s.substr(pos1,n)返回字符串位置为pos1后面的n个字符组成的串   string s2=s.substr(1,5);//bcdef   //s.substr(pos)//得到一个pos到结尾的串   string s3=s.substr(4);//efg   return 0;  }

如果输入的位置超过字符的长度,会抛出一个out_of_range的异常

insert操作:

代码来自cpp官网,经过自己的整理

注意用迭代器当参数和无符号数当参数的区别

  #include <bits/stdc++.h>  using namespace std;  int main()  {   ios::sync_with_stdio(false);   string str="to be question";   string str2="the ";   string str3="or not to be";   string::iterator it;   //s.insert(pos,str)//在s的pos位置插入str   str.insert(6,str2);     // to be the question   //s.insert(pos,str,a,n)在s的pos位置插入str中插入位置a到后面的n个字符   str.insert(6,str3,3,4);    // to be not the question   //s.insert(pos,cstr,n)//在pos位置插入cstr字符串从开始到后面的n个字符   str.insert(10,"that is cool",8); // to be not that is the question   //s.insert(pos,cstr)在s的pos位置插入cstr   str.insert(10,"to be ");   // to be not to be that is the question   //s.insert(pos,n,ch)在s.pos位置上面插入n个ch   str.insert(15,1,':');    // to be not to be: that is the question   //s.insert(s.it,ch)在s的it指向位置前面插入一个字符ch,返回新插入的位置的迭代器   it = str.insert(str.begin()+5,','); // to be, not to be: that is the question   //s.insert(s.it,n,ch)//在s的it所指向位置的前面插入n个ch   str.insert (str.end(),3,'.');  // to be, not to be: that is the question...   //s.insert(it,str.ita,str.itb)在it所指向的位置的前面插入[ita,itb)的字符串   str.insert (it+2,str3.begin(),str3.begin()+3); // to be, or not to be: that is the question...   return 0;  }

erase操作:

用来执行删除操作

删除操作有三种

代码来自cpp官网

  #include <iostream>  #include <string>  int main ()  {   std::string str ("This is an example sentence.");   std::cout << str << 'n';         // "This is an example sentence."   str.erase (10,8);  //   ^^^^^^^^   //直接指定删除的字符串位置第十个后面的8个字符   std::cout << str << 'n';         // "This is an sentence."   str.erase (str.begin()+9);//   ^   //删除迭代器指向的字符   std::cout << str << 'n';         // "This is a sentence."         //  ^^^^^   str.erase (str.begin()+5, str.end()-9);   //删除迭代器范围的字符   std::cout << str << 'n';         // "This sentence."   return 0;  }

append和replace操作:

append函数可以用来在字符串的末尾追加字符和字符串。由于string重载了运算符,也可以用+=操作实现
repalce顾名思义,就是替换的意思,先删除,后增加。

代码来自cpp官网,附上自己的解释

  #include <iostream>  #include <string>  int main ()  {   std::string str;   std::string str2="Writing ";   std::string str3="print 10 and then 5 more";   //直接追加一个str2的字符串   str.append(str2);      // "Writing "   //后面追加str3第6个字符开始的3个字符串   str.append(str3,6,3);     // "10 "   //追加字符串形参的前5个字符   str.append("dots are cool",5);   // "dots "   //直接添加   str.append("here: ");     // "here: "   //添加10个'.'   str.append(10u,'.');     // ".........."   //添加str3迭代器范围的字符串   str.append(str3.begin()+8,str3.end()); // " and then 5 more"   //最后这个比较特殊,意思是添加5个'A',实际上参数里面的65对应的asc码就是65   str.append<int>(5,65);    // "....."   //字符串追加也可以用重载运算符实现   str+="lalala";   std::cout << str << 'n';   return 0;  }

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/482343.html

(0)
上一篇 2020年11月9日
下一篇 2020年11月9日

精彩推荐