一。string的构造函数
1. string(const char* s);
2. string(size_type n, char c); // 初使化为n个c
3. string(const string& str, string::size_type pos, length); // 从str的pos位置拷贝构造最多length长
4. string(const char* s, size_type n); // 从s拷贝n个字符,即使超过数组长度,也继续拷贝。
5. string(); // 空string
6. template<class Iter>
string(Iter begin, Iter end); // 迭代器[begin, end)区间初使化
二。string与数组的输入比较
char info[100];
string stuff;
cin >> info, cin >> stuff;
cin.getline(info, 100), getline(cin, stuff);
两点区别:一是string的作为友元函数,是全局的,而数组的是类的成员函数;二是string的处理函数
可以动态调整长度,因此getline()中不需要指定读取的长度。但是,string的最大长度受size_type约束,
如果读取的字符数超过最大长度,或超过可供分配的内存,则设置输入流的failbit。
三。其它成员变量和函数
string::size_type // 与平台无关表示大小的值
string::npos = -1; // no positon,它是static const型,属于类,表示未找到或失败的意思
string重载了'>','<'等比较符号,能够进行string与string,char*之间的比较。
string.compare() // 功能强大,可以google其功能
string的查找:
size_type find(const string& str, size_type pos = 0) const // 从pos查找str,找到则返回str首次出现的索引,否则返回string::npos
size_type find(const char* s, size_type pos = 0) const // 同上
size_type find(const char* s, size_type pos = 0, size_type n) // 查找由s的前n个字符组成的子串,其余同上。
size_type find(char ch, size_type pos = 0) // 查找字符ch。
以下函数重载特征标与上面相同:
rfind() // 查找最后一次出现的位置
find_first_of() // 在字符串中查找参数中的任意一个字符首次出现的位置
find_last_of() // 对比上面,最后一次出现
find_first_not_of() // 对比2,任意一个不在参数中的字符,首次
find_last_not_of() // 对比4,最后一次
// 容量
string.capacity() // 分配的内存大小,动态调整写时分配的方法
string.reserve(int size) // 确保分配给size字节的内存,默认参数为0,但不强制缩小。
string.size()
string.length() // 都返回长度,前者是为了与STL兼容
string.max_size() // 可容纳的最大长度,不够用会抛出length_error异常
string.empty() // 判断是否为空
// 元素存取
string[pos] = char // STL的vector原理,不抛出异常,如果pos无效
char = string.at(pos)
string.at(pos) = char // 如pos无效,则抛出异常
// 取子串
string1 = string.substr(pos, size) // 取子串
// string到char的转换
string.c_str() // 返回一个以'/0'结尾的字符串,只读的
string.data() // 仅返回头指针,结尾不加'/0',如果string为空,该指针不能解引用,只读的,但是上面和此处其实都可以更改(VC6)。因此是很危险的,能不使用不要使用,或者,最好拷贝出去再用。
string.copy(char*, size_type size, size_type pos = 0) // 从string的pos处拷贝size个到char*中
// assign函数,赋值
string.assign() // 重载特征标类似于构造函数,很多中assign的方法。
// 交换
string.swap(string1) // 交换string内容
// insert(), erase(), clear(), 类似于STL
// string = "" ; 清空
// replace(),替换,也可用来删除! 类似于perl
// 添加
string += string1 / "xx" / char
string.append() // 多个特征标
// STL的迭代器
string::iterator iter;
iter = string.begin()~ string.end();