C++ Primer Plus之string类简介

String类的简介:

一、使用string对象的方式与使用字符数组的异同

1)同:

①可以使用C风格字符串来初始化string对象 string str = "panther"

②可以使用cin来键盘输入储存到string对象中 cin >> str

③可以使用cout来显示string对象 cout << str

④可以使用数组表示法来访问储存在string对象中的字符 str[2]

2)异

①可以将string对象声明为简单变量,而不是数组

string str1;  创建一个长度为0的string对象,但是程序将输入读取到str1中时,将自动调整str1的长度

string str2 = "panther";

②理论上说,可以将char数组视为一组用于储存一个字符串的char储存单元,而string类变量时一个表示字符串的实体。

③不能将一个数组赋给另一个数组,但是可以将一个string对象赋给另外一个string对象。

④取字符串中字符数大小

int len1 = str1.size(); int len2 = strlen(char2)

二、赋值、拼接和附加

①赋值

char char1[20]; //创建一个空的排列

注意:这里需要强调一个东西strlen(char1)这个时候不一定得到就是20,有可能比20大

因为未初始化的数组的内容是未定义的;函数strlen()从数组的第一个元素开始计算字节数,直到遇到空字符。

string str1; //这个时候字符串长度为0

char char2[20] = "jaguar";

string str2 = "jaguar";

str1 = str2;

char1 = char2; (错)

②拼接和附加

string str3;

str3 = str1 + str2;

str1 += str2;

三、string其他操作

C语言中使用strcmp(char1, char2);将字符串复制到字符数组中;使用strcat(char1,char2)将字符串附加到字符数组末尾

string类中直接使用str1 = str2完成复制,str1 += str2完成附加;而且最关键的是使用字符数组的时候要考虑目标数组的大小,必须随时考虑无法储存的情况

四、string的I/O操作

①将一行读入输入读取到数组中cin.getline(char, 20);

函数getline()是istream类的一个类方法,第一个是目标数组,第二个是参数数组的长度,避免超越数组的边界

②将一行输入读取到string对象中的代码

getline(cin,str);

这里要注意getline()不是类方法,而是将cin作为参数,指出到哪里去查抄istream类

五、string类的构造函数

①string(const char *s) 将string对象初始化为s指向的NBTS

string one ("Lottery Winner! ");

②string(size_type n, char c) 创建一个包含n个元素的string对象,其中每个元素都被初始化为字符c

string two (20, '$');

③string(const string & str, string size_type n = pos) 将string对象初始化为对象str中从位置pos开始到结尾的字符,或者从位置pos开始的n个字符

④string() 创建一个默认的string对象,长度为0

⑤string(const char *s, size_type n) 将对象初始化为s指向的NBTS的前n个字符,即使超过了NBTS结尾

char alls[] = "All 's well that ends well";

string five(alls, 20);

⑥template<class Iter>  string(Iter begin, Iter end) 将string对象初始化为区间[begin end]内的字符,其中begin和end的行为就像指针,用于指定位置,

范围包括begin在内,但不包括end

string six(alls + 6, alls +10)

注意string six(five + 6, five +10) 这个不对,因为five是对象名,不会被看作是对象的地址,因为five不是指针所以five+6这个没有意义

但是string seven(&five[6], &five[10]); 这个成立,因为five[6]是一个char值,&five[6]是一个地址,所以可以作为构造函数的一个参数了。

六、string类输入

对于C风格字符串三种输入方式:char info[100];

cin >> info;

cin.getline(info, 100);

cin.get(info,100);

对于string对象,有两种方式string stuff;

cin >> stuff;

getline(cin, stuff);

注意:两个getline都有一个可选的参数,用于指定使用哪个字符来确定输入的边界

cin.getline(info, 100, ':');

getline(stuff, ':');

区别在于string版本的getline()将自动调整目标string对象的大小,使之刚好能够储存输入的字符

七、使用字符串

string str1("cobra");

string str2("coral");

str1.length() == str2.size

确定字符的长度size()和length()成员函数都返回字符串中的字符数;length来自于较早版本的string类,size()则是为提供STL兼容性而添加的

find的四个版本 string::npos 是字符串可储存的最大字符数

①size_type find (const string &str, size_type pos = 0) const

从字符串的pos开始,查找子字符str。如果找到,则返回该子字符首次出现时其首字符的索引,否则返回string:: npos

②size_type find(const char *s, size_type pos = 0) const

从字符串的pos开始,查找子字符串s,如果找到,则返回该子字符首次出现时其首字符的索引,否则返回string:: npos

③size_type find(const char *s, size_type pos = 0, size_type n)

从字符串的pos位置开始,查找s的前n个字符组成的子字符串,如果找到,则返回该子字符串首次出现时其首字符的索引,否则返回string::npos

④size_type find(char ch, size_type pos=0) const 

从字符串的pos位置开始,查找字符ch,如果找到,则返回该字符首次出现的位置,否则返回string::npos

                                                                                                                                To_捭阖_youth 2014.6.30 16:05



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值