string 类型的构造方法

string 类型的构造方法

string s;

定义一个新的空 string 对象,命名为 s

string s(cp);

定义一个新的 string 对象,用 cp 所指向的(以空字符
null 结束的)C 风格字符串初始化该对象

string s(s2);

定义一个新的 string 对象,并将它初始化为 s2 的副本

is >> s;

从输入流 is 中读取一个以空白字符分隔的字符串,写入 s

os << s;

将 s 写到输出流 os 中

getline(is, s)

从输入流 is 中读取一行字符,写入 s

s1 + s2

把 s1 和 s2 串接起来,产生一个新的 string 对象

s1 += s2

将 s2 拼接在 s1 后面

Relational Operators
关系操作符

相等运算(== 和 !=)以及关系运算(<、<=、> 和 >=)都可用于 string 对象的比较,等效于(区分大小写的)字典次序的比较

除了上述的操作外,string 类型还支持大多数顺序容器操作。在某些方面,可将 string 类型视为字符容器。除了一些特殊操作,string 类型提供与 vector 容器相同的操作。string 类型与 vector 容器不同的是,它不支持以栈方式操纵容器: 在 string 类型中不能使用 front、back 和 pop_back 操作。
string 类型提供容器操作意味着可将操纵 vector 对象的程序改写为操纵string 对象。例如,以下程序使用迭代器将一个 string 对象的字符以每次一行的方式输出到标准输出设备:

string s("Hiya!");
string::iterator iter = s.begin();
while (iter != s.end())
cout << *iter++ << endl; // postfix increment: print old value

构造 string 对象的其他方法

string不支持带有单个容器长度作为参数的构造函数。创建 string 对象时:不提供任何参数,则得到空的 string 对象;也可将新对象初始化为另一个 string 对象的副本;或用一对迭代器初始化:或者使用一个计数器和一个字符初始化:

string s1; // s1 is the empty string
string s2(5, 'a'); // s2 == "aaaaa"
string s3(s2); // s3 is a copy of s2
string s4(s3.begin(),s3.begin() + s3.size() / 2); // s4 == "aa"

只有一个指针参数的构造函数,该指针指向以空字符结束的字符数组中的第一个元素。另一种构造函数需要一个指向字符数组元素的指针和一个标记要复制多少个字符的计数器作参数。由于该构造函数带有一个计数器,因此数组不必以空字符结束:

char *cp = "Hiya"; // null-terminated array
char c_array[] = "World!!!!"; // null-terminated
char no_null[] = {'H', 'i'}; // not null-terminated
string s1(cp); // s1 == "Hiya"
string s2(c_array, 5); // s2 == "World"
string s3(c_array + 5, 4); // s3 == "!!!!"
string s4(no_null); // runtime error: no_null not
null-terminated
string s5(no_null, 2); // ok: s5 == "Hi"

string s(cp, n)

创建一个 string 对象, 它被初始化为 cp 所指向数组的前 n 个元素的副本

strings(s2,pos2)

创建一个 string 对象,它被初始化为一个已存在的 string 对象s2 中从下标 pos2 开始的字符的副本

string s(s2, pos2, len2)

创建一个 string 对象,它被初始化为 s2 中从下标 pos2 开始的len2 个字符的副本。如果 pos2 > s2.size(),则该操作未定义,无论 len2 的值是多少,最多只能复制 s2.size() - pos2 个字符

注意:n、len2 和 pos2 都是 unsigned 值

用子串做初始化式

另一对构造函数使用程序员可以在创建 string 对象时将其初始化为另一个 string 对象的子串。

string s6(s1, 2); // s6 == "ya"
string s7(s1, 0, 2); // s7 == "Hi"
string s8(s1, 0, 8); // s8 == "Hiya"

s8 时, 只复制了 4 个字符, 而并不是要求的 8个字符。无论要求复制多少个字符,标准库最多只能复制数目与 string 对象长度相等的字符。 

posted @ 2018-05-04 18:11  刘-皇叔  阅读(583)  评论(0)    收藏  举报