C++标准string类型


我们在前面简单介绍了string类型的使用,现在我们再详细介绍一下string的知识点。


String是定义在STL中的,可以用来替代C风格字符串,使用更加方便,更加安全。它使用std命名空间。



学习目的


1.定义、初始化string对象;


2.在string对象上的操作;


3.读写string对象。



string类介绍


String是一个类,这个类支持对字符串常用的一些操作,同时也能自动的管理内存分配。你可以把string类型当成一个基本类型,这样就可以更好的发挥string类型的作用。

 

1.使用+运算符来连接两个字符串,使用==运算符来比较两个字符串,而无需使用C提供的一些关于字符串的库函数。


2.我们在使用c风格的字符串需要考虑缓冲区的边界,以免造成缓冲区溢出的情况。而string不需要考虑这个问题。



string类的使用


1.包含头文件string,使用命名空间;


2.声明和定义string。


string1.png


1)声明一个string类型的变量str1;


2)声明并定义一个string类型的变量str2;


3)声明并定义一个string类型的变量str3;


4)声明并定义一个string类型的变量str4;


5)声明并定义一个string类型的变量str5,它的值为十个a;


6)利用变量str5创建str6,两个变量是一样的内容。


3.字符串的加法


string2.png


字符串的加法操作将字符串连接,加号后面的字符串会拼接到前面的字符串后面。前面两种都至少有一个string变量,加法连接无法连接两个string类型的常量。所以加法操作的正确做法就是保证两个操作数中至少有一个string变量。


4.字符串的比较


这些表达式会返回一个bool类型的值。


string3.png


5.字符串的一些常用方法


Size()   //返回字符串的长度
Str[n];   //下标访问数据,0~n~size-1
empty()  // 判断字符串是否为空


6.字符串的实例


文本编辑器:创建一个程序,将我们输入的每一行的数据拼接到一个字符串后面。


测试代码如下:


#include <iostream>  //输入输出流的包含
#include<string>  //string类的包含
using namespace std;  //命名空间的使用
int main() {
String str;  //接收我们输入的所有字符串
String str1; //保存每一行的字符串,用来拼接到str后面
int nLine=0;  //统计我们输入的行数
while(getline(cin,str1)) {  //getline(cin,str1)是一个有两个参数的每一获取一行字符串的函数,cin代表它是从输入流中读取数据,str1是将读取的一行数据保存到str1中
 if(str1==”q”) {  //如果我们输入q,就停止输入
   break;  //跳出循环
}
str+=str1; str+=”\n”;  //字符串的拼接,由于str1中是不会将换行符读取进去的,所以为了输出的时候保持我们输入时候的每一行格式,我们手动在输入的每一行字符后面添加一个换行符保存在每一行后面,换行符也是一个字符,这样输出的时候会自动换行
nLine ++;   //统计行数
}
cout<<”total chars:”<<str.size()<<”total lines:”<<nLine<<endl; //输出字符总数及行数
cout <<str<<endl;
return 0;
}


运行结果如下:不知道大家注意到一个细节没有,我们输入了23个字符,size函数统计结果显示为26个,还有三个字符就是我们行末尾的换行符。我们前面就提到过,C风格的字符串的结尾中总是有一个结尾标志\0,如果我们对c风格的字符串使用cout输出,可以预想它遇到\0是会认为这个字符串已经结束了,但是这里对string类型的字符串就没有结束标志,只会按照字符串的大小来输出。


string4.png


string是一个类,它的内部也是使用c风格的字符串来实现的,可以用一个方法来获得它的C风格的字符串的常量指针。String类型的字符串的长度是可以自动增加的,当我们在对字符串进行拼接时,如果它原来的的空间不够,会自动销毁这一片空间,然后重新分配一段更大的空间。String类的内部是可以自动管理内存的释放和分配的。如果一旦内存进行了重新分配和释放,那么你原来获得的常量指针指向的地址就是无效的了,这个时候你对p的操作就是有风险的,所以说我们尽量不要去使用它。


const char *p=str.c_str();  //返回的是常量字符指针,所以只能读不能写


我们已经为大家介绍了几节课了,大家只是看我来操作,也没有亲自去实践。就像你在学习游泳,你在岸上看别人游泳一百年,你不亲自下水,你也是学不会的。所以大家下来一定要多练,多写。



【本文由麦子学院独家原创,转载请注明出处并保留原文链接】

logo
© 2012-2016 www.maiziedu.com
蜀ICP备13014270号-4 Version 5.0.0 release20160127
有一位课程导师想与你聊聊

免费电话咨询