C++第八天:string类

学习C++推荐的网站:http://www.cplusplus.com/reference/string/string/find/

string类的常用接口:

string() 构造空函数
string(const char* s) 用c——string来构造string类
string(size_t n , char c) string类对象包含N个C
string(const string &s) 拷贝构造
string(const string& s, size_t n) 用s的前N个构造新的n

	string s1();
	string s2("hello world!");
	string s3(10, 'a');
	string s4(s2);
	string s5(s2, 5);
	cout << s2 << endl;

容量操作

size_t size()const 返回有效字符长度
size_t length()const 返回有效字符长度
size_t capacity() 返回空间总大小
bool empty() 判断是否为空
void clear()清空有效字符
void resize(size_t n, char c)将有效数字改成n个,多出的空间用c填充。
void resize(size_t n) 将有效数字改成n个,多的用‘\0’填充。
void reserve() 为字符串预留空间

	string s("hello world");

	cout << s.length() << endl;//输出长度
	cout << s.size() << endl;//输出数量
	cout << s.capacity() << endl;//输出容量
	int cur = s.empty();//判断string s是否为空

	s.clear();//清空s 只改变size不改变capacity
	cout << s.size() << endl;
	cout << s.capacity() << endl;

	s.resize(10, 'a'); //将S中有效字符个数增加到10个,用a填充
	cout << s.size() << endl;
	cout << s.capacity() << endl;

	s.resize(16);//扩充到16个,多的位置用\0来填充。
	cout << s.size() << endl;
	cout << s.capacity() << endl;

注意点:
1.length和size的实现原理基本相同,引入size的原因是为了和其他的接口保持一致
2.clear只是清空,不改变底层空间大小。
3.resize(size_t n) 与 resize(size_t n, char c)都是将字符串大小改成N个,前者是用\0填充,后者是用c来填充。用size来扩充时,会扩容,但是如果元素减少,底层空间大小不变。
4.reserve,为底层预留空间,不会改变size的大小。利用reserve提前扩容可以提高效率。

类对象的访问操作

char& operator[](size_t pos) 返回pos位置的字符,非const对象调用
const char& operator[](size_t pos) 返回pos位置的字符,const对象调用

类对象的修改操作

void push_back(char c) 在字符串后插字符c
string& append (const chars)在后面追加一个字符串
string& operator+=(const string& str) 在字符串后追加字符串str
const char
c_str( )const 返回C格式字符串

size_t find (char c, size_t pos = 0)const 0)const
从字符串pos位置开始往后找字符c,返回该字符在字符串中的位置(函数重载,默认从0开始,可以自己调试)

size_t rfind(char c, size_t pos = npos)从字符串pos位置开始往前找字符c,返回该字符在 字符串中的位置

string substr(size_t pos = 0, size_t n = npos)const
= npos)const
在str中从pos位置开始,截取n个字符,然后将其返回。

	string s;
	s.append("hello");
	s.push_back(' ');
	s += 'w';//+单个字符
	s += "orld";//+字符串
	cout << s << endl;
	cout << s.c_str() << endl;//转为C语言

	string file1("string.cpp");
	size_t pos = file1.rfind('.');//查找.的位置
	string sf = file1.substr(pos, file1.size() - pos);//从POS位置开始,截size() - pos个字符
	cout << pos << endl;
	//输出域名
	string url("http://www.cplusplus.com/reference/string/string/find/");
	cout << url << endl;
	size_t start = url.find("://");
	if (start == string::npos)
	{ 
		cout << "invalid url" << endl;
		return;
	}
	start += 3;
	size_t finish = url.find('/', start);
	string address = url.substr(start, finish - start);
	cout << address << endl;

猜你喜欢

转载自blog.csdn.net/l477918269/article/details/86578786