C++——初识string类

(一)string类

一.常见接口:

1.string():构造空的string类对象

2.string(const char* s):用字符串s来构造对象

3.string(size_t  n,char  c):string类对象中包含n个字符c

4.string(const string& s):拷贝构造

5.string(const string& s,size_t  n):从s中的第n+1个字符开始往后来构造新的对象

例:

void test() {
	string s1("hehe");
	cout << s1 << endl;
	s1.append("wo");
	cout << s1 << endl;
	string s2("hehheheheheh", 3);
	string s3(10,'k');
	string s4;
	cout << s2 << endl;
	cout << s3 << endl;
	cout << s4 << endl;
}

 运行结果:

二.常用容器

1.size_t  size()const :返回字符串有效字符的长度

2.size_t  length()const:返回字符串有效字符的长度

3.size_t  capacity()const:返回总空间大小

4.bool  empty()const:检测字符串是否为空串,是返回true,否返回false

5.void  clear():清空有效字符

6.void  resize(size_t  n,char  c):将有效字符的个数改成n个,多出的空间用字符c填充

7.void  resize(size_t  n):将有效字符的长度改成n个,多出的空间用0填充

8.void  reserve(size_t  n):为对象申请一段大于等于n的空间,就增长方式看编译器是怎么操作的。

注意:resize不改变空间,reserve改变空间(只增大,不减小,因为减小后如果右要扩,开销比较大)

例:

	string s1("hehe");
	cout << s1 << endl;
	cout << s1.size() << endl;
	cout << s1.capacity() << endl << endl;

	s1.resize(20);
	cout << s1.size() << endl;
	cout << s1.capacity() << endl;

执行结果:

三.访问操作

[ ]——与数组相似,采用下标访问

for(int i=0;i<s1.size();i++){
    cout<<s1[i]<<" ";
}

这样就将该字符串按每一个字符进行打印。

运行结果:

四.迭代器

上述将字符串按照每一个字符进行输出也可以用迭代器进行操作。

1.正向迭代器

迭代器的定义格式:

std::string::iterator  变量名 ;

	string::iterator it1 = s1.begin();
	while (it1 != s1.end()) {
		cout << *it1 << " ";
		++it1;
	}
	cout << endl;

运行结果:同上。

2.反向迭代器

std::string::reverse_iterator  变量名;

	string::reverse_iterator rit1 = s1.rbegin();
	while (rit1 != s1.rend()) {
		cout << *rit1 << " ";
		++rit1;
	}
	cout << endl;

运行结果:

3.const迭代器 (遍历const对象)

std::string::const iterator  变量名;

std::string::const everse_iterator  变量名;

注意:

1.以上迭代器的实现类似于指针。

2.迭代器不局限于以上几种。

3.非const迭代器可以对对象进行读与写操作。

4.迭代器的作用区间是左闭右开的

例:

	string s1("hehe");
	cout << *(s1.begin()) << endl;
	cout << *(s1.end()-1) << endl;

运行结果:

即begin所指向的位置就是字符串的首元素的位置,但是end所指向的位置是有效元素最后一个位置的后一个位置——‘\0’

 

发布了58 篇原创文章 · 获赞 43 · 访问量 4410

猜你喜欢

转载自blog.csdn.net/Wz_still_shuai/article/details/90410221