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