赞
踩
string类的文档介绍简单总结:
1.string是表示字符串的字符串类
2.该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。
3.string在底层实际是:basic_string模板类的别名,typedef basic_string<char, char_traits, allocator> string;
4.不能操作多字节或者变长字符的序列。
5 .在使用string类时,必须包含头文件以及using namespace std;
1.string类对象的常见构造
函数名称 | 功能说明 |
---|---|
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个字符构造新的string类对象 |
函数名称 | 函数功能 |
---|---|
size_t size() const | 返回字符串有效字符长度 |
size_t length() const | 返回字符串有效字符长度 |
size_t capacity ( ) const | 返回空间总大小 |
bool empty ( ) const | 检测字符串释放为空串,是返回true,否则返回false |
void clear() | 清空有效字符 |
void resize ( size_t n, char c ) | 将有效字符的个数该成n个,多出的空间用字符c填充 |
void resize ( size_t n ) | 将有效字符的个数改成n个,多出的空间用0填充 |
void reserve ( size_t res_arg=0 ) | 为字符串预留空间 |
使用这些函数时候应该注意几点:
①: size()与length()方法底层实现原理完全相同,引入size()的原因是为了与其他容器的接口保持一致,一般情况下基本都是用size()
②: clear()只是将string中有效字符清空,不改变底层空间大小
③:resize(size_t n) 与 resize(size_t n, char c)都是将字符串中有效字符个数改变到n个, 不同的是当字符个数增多时:resize( n )用0来填充多出的元素空间(多出位置用缺省值’\0’进行填充),resize(size_t n, char c)用字符c来填充多出的元素空间。注意:resize在改变元素个数时,如果是将元素个数增多,可能会改变底层容量的大小,如果是将元素个数减少,底层空间总大小不变。
④:reserve(size_t res_arg=0):为 string 预留空间,不改变有效元素个数,当reserve的参数小于string的底层空间总大小时,reserver不会改变容量大小。
3.string类对象的访问操作
函数名称 | 函数功能 |
---|---|
char& operator[] ( size_t pos ) | 返回pos位置的字符,非const string类对象调用 |
const char& operator[] ( size_t pos )const | 返回pos位置的字符,const string类对象调用 |
注意:const string 类对象返回值不能被修改。
函数名称 | 函数功能 |
---|---|
void push_back(char c) | 在字符串后尾插字符c |
string& append (const char* s) | 在字符串后追加一个字符串 |
string& operator+=(const string&str) | 在字符串后追加字符串str |
string& operator+=(const char* s) | 在字符串后追加C个数字符串 |
string& operator+=(char c) | 在字符串后追加字符c |
const char* c_str( )const | 返回C格式字符串 |
size_t find(char c, size_t pos =0)const | 从字符串pos位置开始往后找字符c,返回该字符在字符串中的位置 |
size_t rfind(char c, size_t pos = npos) | 从字符串pos位置开始往找前字符c,返回该字符在字符串中的位置 |
string substr(size_t pos = 0, size_t n= npos)const | 在str中从pos位置开始,截取n个字符,然后将其返回 |
npos是string里面的一个静态成员变量
static const size_t npos = -1;
//关于 find 与 substr 的一些用法 int main() { // 获取file的后缀 string file1("string.cpp"); size_t pos = file1.rfind('.'); cout << pos << endl; cout << file1.size() << endl; string suffix(file1.substr(pos, file1.size() - pos)); cout << suffix << endl; // 取出url中的域名 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; // 删除url的协议前缀 pos = url.find("://"); url.erase(0, pos + 3); cout << url << endl; system("pause"); return 0; }
注意:
①: 在string尾部追加字符时,s.push_back© / s.append(1, c) / s += ‘c’ 三种的实现方式差不多,一般情况下string类的+=操作用的比较多,+= 操作不仅可以连接单个字符,还可以连接字符串。
②: 对string操作时,如果能够大概预估到放多少字符,可以先通过reserve把空间预留好。
函数名称 | 函数功能与说明 |
---|---|
operator+ | 尽量少用,因为效率低 |
operator>> | 输入运算符重载 |
operator<< | 输出运算符重载 |
getline | 获取一行字符串 |
relational operators(不太常用) | 大小比较 |
上面就是string 中常用的一些接口,string类中还有一些其他的操作,这里不一一列举,需要用的时候查查文档就可以。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。