学习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;