8.11.1 创建字符串对象
字符串对象的创建非常容易,但具体如何创建有不少选择。首先,可以像下面这样创建并初始化一个字符串对象:
- string sentence = "This sentence is false.";
sentence对象将用赋值运算符右边的字符串字面值来初始化。还可以使用下面的函数记号:
- string sentence("This sentence is false.");
由于字符串对象末尾没有空字符,因此字符串长度是字符串中的字符个数,在本实例中是23。可以在任何时候通过调用字符串对象的length()成员函数,来查看字符串对象所封装的字符串的长度。例如:
- cout << "The string is of length " << sentence.length() << endl;
执行该语句将产生如下输出:
- The string is of length 23
顺便提一下,可以用与任何其他变量相同的方式将字符串对象输出到cout:
- cout << sentence << endl;
该代码在它本身的那一行上显示sentence字符串。也可以像下面这样将字符串读到字符串对象中:
- cin >> sentence;
然而,以这种方式从stdin中读取字符串时会忽略开头的空格,直到发现非空格的字符。当在一个或多个非空格字符后面输入一个空格时,这种方式也会终止输入。我们常常希望将包括空格的文本读入一个字符串对象(可能跨多行)中。在本例中,使用在string头文件中定义的getline()函数模板要方便得多。例如:
- getline(cin, sentence, '*');
这个函数模板专门用来将数据从流中读入到string或wstring对象中。第一个实参是作为输入源的流-- 它不一定是cin;第二个实参是接收输入的对象;第三个实参是终止读取的字符。这里将终止字符指定为'*',因此该语句会将cin中的文本(包括空格)读入sentence中,直到从输入流中读到以星号指示的输入末尾。
如果在创建string对象时没有指定初始字符串字面值,该对象就会包含一个空字符串:
- string astring; // Create an empty string
调用字符串astring的length()将返回结果0。
另一种可能性是用一个重复指定次数的字符来初始化字符串对象:
- string bees(7, 'b'); // String is "bbbbbbb"
该构造函数的第一个实参是第二个实参指定的字符的重复次数。
最后一种方式是用另一个字符串对象的全部或一部分来初始化字符串对象。下面是用另一个字符串对象作为初始化器的示例:
- string letters(bees);
这里将用bees中包含的字符串来初始化letters对象。
为了选择一个字符串对象的一部分作为初始值设定项,我们调用带3个实参的字符串构造函数,第一个实参是作为初始化字符串来源的字符串对象,第二个实参是要选择的第一个字符的索引位置,第三个实参是要选择的字符个数。例如:
- string sentence("This sentence is false.");
- string part(sentence, 5, 11);
这里用sentence中从第6个字符(第一个字符位于索引位置0)开始的11个字符来初始化part对象。因此part包含字符串"sentence is"。
当然,可以创建string对象的数组,并用常规表示法来初始化它们。例如:
- string animals[] = { "dog", "cat", "horse", "donkey", "lion"};
上面的代码创建包含5个字符串对象的一个数组,用大括号括起来的字符串字面值初始化这些元素。