您的位置:首页 > 编程语言 > C语言/C++

C++ primer: C++中string标准库类型

2013-03-18 21:38 501 查看
(C++ primer读书笔记)2013.3.18 zzy @B309

C++标准库提供string类型,支持长度可变的字符串。使用时要包含头文件string,还要对名字string做using声明。

#include <string>

using std::string;


初始化:string标准库支持几个构造函数,在没有指明对象初始化式时,系统使用默认构造函数。

string s1;          默认构造函数,s1为空串

string s2(s1);       将s2初始化为s1的一个副本

string s3(“value”);  将s3初始化为一个字符串子面值的副本

string s4(n, ‘c’);    将s4初始化为n个字符’c’构成的字符串


输入输出:string对象用标准输入cin读,用标准输出cout写,下面是几种典型实践:

1.用标准输入/输出操作符:>> and <<:

string s;

cin >> s;

cout << s << endl;


输入操作符>>在读取string类型时:

·读取并忽略开头所有的空白字符(空格、换行符、制表符);

·读取字符直至再次遇到空白字符,读取终止。

2.读入未知数目string对象:

string word;

//read until end-of-file,writing each word to a new line.

while(cin >> word)

cout << word << endl;


3.用getline函数读取整行文本:

string line;

//read line at time until end-of-file

while(getline(cin, line))

cout << line << endl;


getline函数接受两个参数:一个输入流对象,一个string对象。getline一次读取一行,遇到换行符停止。行尾的换行符也会读取,但是换行符不会存入string对象中。getline不会忽略行开头的换行符,如果第一个字符就是换行符,那么getline函数也将停止读入并返回,此时string对象被置为空string。

测试下面两个完整的程序对行开头/结尾的空白字符(空格、制表符、换行符)的处理,特别是行开头处的换行符:

程序清单1:

#include<iostream>

#include<string>

// or use “using namespace std;” instead

using std::cin;

using std::cout;

using std::endl;

using std::string;

int main()

{

string word;

while(cin >> word)

cout << "BEGIN-" << word << "-END" << endl;

return 0;

}


程序清单2:

#include<iostream>

#include<string>

// or use “using namespace std;” instead

using std::cin;

using std::cout;

using std::endl;

using std::string;

int main()

{

string line;

while(getline(cin, line))

cout << "BEGIN-" << line << "-END" << endl;

return 0;

}


string对象的操作:

1.成员函数size() 返回string对象中字符的个数,返回类型为string::size_type(与unsigned具有相同含义)。

2.成员函数empty() 测试string对象是否为空,返回bool型。

string s(“zzy@Library”);

cout << s.size() << endl;

if(s.empty())

cout << “empty!” << emdl;


3.关系运算:== != < <= >= >,比较两个string对象的大小或相等关系,表达式返回的是bool类型。

关系操作符比较两个string对象时采用了和(大小写敏感的)字典排序相同的策略:

·如果两个string对象长度相同,且对应字符相同,那么它们是相等的;

·如果两个string对象长度不同,且短的string对象是长的string对象的前缀,则短的string对象小;

·比较两个string对象出现的第一个不同的字符。

4.赋值操作

可以把一个string对象赋值给另一个string对象,也可以把一个字符串字面值赋值给一个string对象

string s1,s2;

s1 = “zzy @ Library”;

s2 = s1;


5.string对象的加法被定义成连接。两个string对象可以通过’+’操作符或”+=”操作符连接成一个string对象。string对象还可以和字符串字面值连接,’+’操作符的两个操作数中至少有一个要是string对象,表达式返回一个string对象。

‘+’操作符两个操作数中有一个是string对象,另一个还可以是单个字符,或数字,数字按ASCII码转换成相应字符。

程序清单3

#include<iostream>

#include<string>

//or use “using namespace std;” instead

using std::cin;

using std::cout;

using std::endl;

using std::string;

int main()

{

string s1 = "zzy", s2 = " @ ", s3 = "Library!\n";

string s4 = s1 + s2 + s3;

cout << s4;

string s5 = "IF " + s4 + "coding " + "ENDIF";

cout << s5;

return 0;

}


6.string对象通过[ ]下标操作符访问每个元素,范围是0 - (size() - 1),C++标准库对访问越界不做检查。

string s = "zzy @ Library4D";

for(string::size_type i = 0; i != s.size(); ++i)

cout << s[i];

cout << endl;

for(int i = -1; i <= 20; ++i)

cout << s[i];

cout << endl;

for(int i = 0; i < s.size(); ++i)

s[i] = '$';

cout << s << endl;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: