C++中的字符串string,你真的弄懂了吗?

一、string类简介

string类是C++中用来操作字符串序列的、可以自身管理内存的容器,自身携带的构造函数和析构函数,可以让我们直接使用而不必关心内存的分配细节,可以说是C++中最让人放心的一个类了。

它支持元素的存取访问、字符串比较、字符串内容的修改和替换、字符串连接、字符串的查找和搜索、字符串的IO操作、可以方便的获取器大小和容量等等。因此,无论学习何种语言,字符串必是每一个程序员的最爱!

二、string类的使用

1、string类的初始化方法

string strEmpty; // 空字符串
string str1 = "ISMILELI";
string str2(str1); // str1内容复制给str2
string str3(str1,2,5);// 从str1的第2个元素开始复制5个数据给str2
string str4(str1,5,'S'); // 赋值给str4五个S
string str5(str1.begin(),str1.end()); // 迭代器的方式赋值
string str6(str1,6); // 把str1的前六个赋值给str5
cout << "str1:" << str1<<endl;

2、string类的大小

size()和length()是比较常用的获得字符串中字符个数的方法,两个效果相同。
max_size()是返回string最大能包含的字符串数,当超过时编译器会抛出length_error的异常。
capacity()是重新分配内存之前string中能包含的最大字符个数。

3、string类的元素访问

string类支持下标操作[]和函数at()访问,两者的不同之处是下标操作不检查索引的有效性,超出下标时会引起不可测的麻烦;使用at()函数会检查下标的有效性,超出下标时会抛出异常out_of_range。注意这两个操作返回的都是“引用”,当字符串被重新分配内存后可能会引起错误。第一个下标为0,最后一个为length()-1。

4、string比较操作

1》使用常用的运算符比较:>,<,==,>=,<=,!=。
2》使用compare()函数,能够区分字母的大小写比较,相同返回0,按顺序先大于返回正数,否则为负数。

string str7("abcdefg");
string str8("ABCdefg");
string str9("123456");
string str10("def1234");
string str11("abcdefg");
int num1 = str7.compare(str11); // 完整的比较 num1=0
int num2 = str7.compare(1,4,str8); //bcde和str8比较num2=1
int num3 = str8.compare(2,5,str7,2,5); //Cde和cde比较 num3=-1
int num4 =  str9.compare(0,4,str10,3,6); // 1234和1234比较 num4=0

5、字符串的修改

字符串提供了很多修改的方法可供程序员调用,例如直接赋值操作=、赋值n函数assign、删除函数erase、插入函数insert、交换函数swap、添加函数append等等,每种函数又提供了很多的重载方法,使用非常方便灵活。

string strChange;
strChange.assign(str11); // 直接赋值给另一个字符串,str11在标题4中定义
string strSub;
strSub(str11,0,3);  // 从位置0开始赋值3个字符
strChange.erase(strChange.begin(),strChange.end()); // 移除
strChange.swap(strSub); // 交换内容
strSub.insert(1,"A"); // 在strSub位置1插入一个A
strSub.insert(2,"BBBBB",3); // 从strSub位置2插入“BBBBB”的前三个字符
strSub.append("DDD"); // 追加字符串
strChange.append(strSub.begin(),strSub.end()); // 把strSub中的字符串全部追加到strChnage中

6、字符串的替换

字符串的替换函数是replace,别看只有一个函数,它却重载了10中方法,没有你想不到的,只有你用不到的!

string strSrc("abcdefgh");
string strDst(1234567);
strSrc.replace(1,3,strDst); // 从strSrc的1处开始使用strDst中的前3字符替换
strSrc.replace(1,3,strDst,1,3); // 从strSrc的1处开始,使用strDst中的[1,3]的子串开始替换
strSrc.replace(1,4,4,'X'); // 使用4个字符X替换strSrc中从[1,4]的字符
strSrc.replace(strSrc.begin(),strSrc.end(),strDst); // 使用迭代器替换

7、字符串的连接

直接使用+运算符即可。

string strConnect = str10+str11;

8、字符串的查找

字符串提供了很多查找的函数,每种函数也都提供了众多的重载方法,例如:从前查找函数find,从后查找函数rfind、条件查找find_first_of和find_last_of、条件查找find_first_not_of和find_last_not_of等。

string strFind = “ISMILE”
string str = "hello,I'm ISMILELI,Thank you for paying attention to me! "
str.find(strFind,0); // 正向查找
str.find(strFind,3); // 从下标位置3开始正向查找
str.rfind(strFind,0); // 反向查找
str.find(strFind,3); // 从下标位置3开始反向查找
str.find_first_of(strFind); // 查找第一个是strFind的子串
str.find_first_of(‘I’); // 查找第一个是I的字符
str.find_first_not_of(strFind); // 查找第一个不是strFind的子串
str.find_first_not_of(‘I’); // 查找第一个不是I的字符
str.find_last_of(strFind); // 查找最后一个是strFind的子串
str.find_last_of(‘I’); // 查找最后一个是I的字符
str.find_last_not_of(strFind); // 查找最后一个不是strFind的子串
str.find_last_not_of(‘I’); // 查找最后一个不是I的字符

不再单独建立工程示例,文中已经提供了示范代码。

能力有限,如有错误,多多指教!觉得有用,点赞鼓励一下吧!

发布了157 篇原创文章 · 获赞 135 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/toby54king/article/details/104997601