C/C++ 学习笔记:C++ 中 string 类使用总结

来源:互联网 发布:天津市网络教育平台 编辑:程序博客网 时间:2024/04/30 02:43

C++中的string类使用总结

需要使用 using  std::string; 或 using namespace std;

string类的构造函数

string(const char *s);// 用 C 类型字符串s初始化string(int n,char c);// 用 n 个字符 'c' 初始化
此外,string类还支持默认构造函数和复制构造函数,如

string s1;string s2 = "Buyun";
都是正确的写法。当构造的string太长而无法表达时会抛出 length_error 异常。

string类的字符操作

const char &operator[](int n)const;const char &at(int n)const;char &operator[](int n);char &at(int n);
说明:operator[] 和 at() 均返回当前字符串中第 n 个字符的位置,但 at 函数提供范围检查,当越界时会抛出 out_of_range 异常,下标运算符[]不提供检查访问。
const char *data()const;// 返回一个非 null 终止的 C  字符数组const char *c_str()const;// 返回一个以 null 终止 C 字符串int copy(char *s, int n, int pos = 0) const;// 把当前串中以 pos 开始的 n 个字符拷贝到以 s 为起始位置的字符数组中,返回实际拷贝的数目

string的特性描述

int capacity()const;// 返回当前容量(即 string 中不必增加内存即可存放的元素个数)int max_size()const;// 返回 string 对象中可存放的最大字符串的长度int size()const;// 返回当前字符串的大小int length()const;// 返回当前字符串的长度bool empty()const;// 判断当前字符串是否为空void resize(int len,char c);// 把字符串当前大小置为 len,并用字符 'c' 填充不足的部分

string类的输入输出操作

string类重载了运算符 operator>> 用于输入,同样重载了运算符 operator<< 用于输出操作。
函数 getline(istream &in,string &s); 用于从输入流 in 中读取字符串到 s 中,以换行符 '\n' 分开。

string的赋值

string &operator=(const string &s);// 把字符串 s 赋给当前字符串string &assign(const char *s);// 用 C 类型字符串 s 赋值string &assign(const char *s, int n);// 用 C 类型字符串 s 开始的 n 个字符赋值string &assign(const string &s);// 把字符串 s 赋给当前字符串string &assign(int n, char c);// 用 n 个字符 'c' 赋值给当前字符串string &assign(const string &s, int start, int n);// 把字符串 s 中从 start 开始的 n 个字符赋给当前字符串string &assign(const_iterator first, const_itertor last);// 把 first 和 last 迭代器之间的部分赋给字符串

string的连接

string &operator+=(const string &s);// 把字符串 s 连接到当前字符串的结尾 string &append(const char *s);// 把 C 类型字符串 s 连接到当前字符串结尾string &append(const char *s, int n);//把 C 类型字符串s的前n个字符连接到当前字符串结尾string &append(const string &s);// 同 operator+=()string &append(const string &s, int pos, int n);// 把字符串 s 中从 pos 开始的 n 个字符连接到当前字符串的结尾string &append(int n, char c);// 在当前字符串结尾添加 n 个字符 'c'string &append(const_iterator first, const_iterator last);// 把迭代器 first 和 last 之间的部分连接到当前字符串的结尾

string的比较

bool operator==(const string &s1, const string &s2)const;// 比较两个字符串是否相等

// 运算符 ">","<",">=","<=","!=" 均被重载用于字符串的比较

int compare(const string &s) const;// 比较当前字符串和 s 的大小int compare(int pos, int n, const string &s)const;// 比较当前字符串从 pos 开始的 n 个字符组成的字符串与 s 的大小int compare(int pos, int n, const string &s, int pos2,int n2)const;// 比较当前字符串从 pos 开始的 n 个字符组成的字符串与 s 中 pos2 开始的 n2 个字符组成的字符串的大小int compare(const char *s) const;int compare(int pos, int n, const char *s) const;int compare(int pos, int n, const char *s, int pos2) const;
compare函数在 > 时返回 1,< 时返回 -1,== 时返回 0  

string的子串

string substr(int pos = 0,int n = npos) const;// 返回 pos 开始的 n 个字符组成的字符串

string的交换

void swap(string &s2);// 交换当前字符串与 s2 的值

string类的查找函数

成功返回所在位置,失败时返回 string::npos 的值 

int find(char c, int pos = 0) const;// 从 pos 开始查找字符 'c' 在当前字符串的位置int find(const char *s, int pos = 0) const;// 从 pos 开始查找字符串 s 在当前串中的位置int find(const char *s, int pos, int n) const;// 从 pos 开始查找字符串 s 中前 n 个字符在当前串中的位置int find(const string &s, int pos = 0) const;// 从 pos 开始查找字符串 s 在当前串中的位置
int rfind(char c, int pos = npos) const;// 从 pos 开始从后向前查找字符 'c' 在当前串中的位置int rfind(const char *s, int pos = npos) const;// 从 pos 开始从后向前查找 C 类型的字符串 s 的位置int rfind(const string &s, int pos = npos) const;// 从 pos 开始从后向前查找字符串 s 的位置int rfind(const char *s, int pos, int n = npos) const;// 从 pos 开始从后向前查找字符串 s 中前 n 个字符组成的字符串在当前串中的位置
int find_first_of(char c, int pos = 0) const;// 从 pos 开始查找字符 'c' 第一次出现的位置int find_first_of(const string &s, int pos = 0) const;// 从 pos 开始查找字符串 s 第一次出现的位置int find_first_of(const char *s, int pos = 0) const;// 从 pos 开始查找字符 'c' 第一次出现的位置int find_first_of(const char *s, int pos, int n) const;// 从 pos 开始查找当前串中第一个由 s 的前 n 个字符组成的数组里的字符的位置
int find_first_not_of(char c, int pos = 0) const;<span style="font-family: Arial, Helvetica, sans-serif;">// 从 pos 开始查找字符 'c' 第一次不出现的位置</span>int find_first_not_of(const char *s, int pos = 0) const;int find_first_not_of(const char *s, int pos, int n) const;int find_first_not_of(const string &s, int pos = 0) const;// 从当前串中查找第一个不在串 s 中的字符出现的位置
int find_last_of(char c, int pos = npos) const;int find_last_of(const char *s, int pos = npos) const;int find_last_of(const char *s, int pos, int n = npos) const;int find_last_of(const string &s, int pos = npos) const; 
int find_last_not_of(char c, int pos = npos) const;int find_last_not_of(const char *s, int pos = npos) const;int find_last_not_of(const char *s, int pos, int n) const;int find_last_not_of(const string &s, int pos = npos) const;

string类的替换函数

string &replace(int p0, int n0, const char *s);// 删除从 p0 开始的 n0 个字符,然后在 p0 处插入串 sstring &replace(int p0, int n0, const char *s, int n);// 删除 p0 开始的 n0 个字符,然后在 p0 处插入字符串 s 的前 n 个字符string &replace(int p0, int n0, const string &s);// 删除从 p0 开始的 n0 个字符,然后在 p0 处插入串sstring &replace(int p0, int n0, const string &s, int pos, int n);// 删除 p0 开始的 n0 个字符,然后在 p0 处插入串 s 中从 pos 开始的 n 个字符string &replace(int p0, int n0, int n, char c);// 删除 p0 开始的 n0 个字符,然后在 p0 处插入 n 个字符 'c'
string &replace(iterator first0, iterator last0, const char *s);// 把 [first0,last0) 之间的部分替换为字符串 sstring &replace(iterator first0, iterator last0, const char *s, int n);// 把 [first0,last0) 之间的部分替换为 s 的前 n 个字符string &replace(iterator first0, iterator last0, const string &s);// 把 [first0,last0) 之间的部分替换为串 sstring &replace(iterator first0, iterator last0, int n, char c);// 把 [first0,last0) 之间的部分替换为n个字符 'c'string &replace(iterator first0, iterator last0, const_iterator first, const_iterator last);// 把 [first0,last0) 之间的部分替换成 [first,last) 之间的字符串

string类的插入函数 

string &insert(int p0, const char *s);// 在 p0 位置插入 C 类型字符串 sstring &insert(int p0, const string &s);// 在 p0 位置插入字符串 sstring &insert(int p0, const char *s, int n);// 在 p0 位置插入字符串 s 前 n 个字符string &insert(int p0, const string &s, int pos, int n);// 在 p0 位置插入字符串 s 中 pos 开始的前 n 个字符string &insert(int p0, int n, char c);// 在 p0 处插入 n 个字符 'c'
iterator insert(iterator it, char c);// 在 it 处插入字符 'c',返回插入后迭代器的位置void insert(iterator it, int n, char c);// 在 it 处插入 n 个字符 'c'void insert(iterator it, const_iterator first, const_iterator last);// 在 it 处插入 [first,last) 之间的字符

string类的删除函数 

iterator erase(iterator first, iterator last);// 删除 [first,last) 之间的所有字符,返回删除后迭代器的位置iterator erase(iterator it);// 删除 it 指向的字符,返回删除后迭代器的位置string &erase(int pos = 0, int n = npos);// 删除 pos 开始的 n 个字符,返回修改后的字符串

string类的迭代器处理

string类提供了向前和向后遍历的迭代器iterator,迭代器提供了访问各个字符的语法,类似于指针操作,迭代器不检查范围。
用 string::iterator 或 string::const_iterator 声明迭代器变量,const_iterator 不允许改变迭代的内容。常用迭代器函数有:
const_iterator begin()const;iterator begin();// 返回 string 的起始位置const_iterator end()const;iterator end();//返回 string 的最后一个字符后面的位置
const_iterator rbegin()const;iterator rbegin();// 返回 string 的最后一个字符的位置const_iterator rend()const;iterator rend();//返回 string 第一个字符位置的前面

反向迭代器可以用于反向遍历。eg:

string str = "Buyun Tang";for(string::reverse_iterator it = str.rbegin(); it != str.rend(); it++) {       cout << *it << ", ";}

字符串流处理

通过定义 ostringstream 和 istringstream 变量实现,# include <sstream>  头文件中
例如:
string input("hello,my name is Buyun");istringstream is(input);string s1,s2,s3,s4;is >> s1 >> s2 >> s3 >> s4; // 结果为 s1 = "hello,my", s2="name", s3="is", s4="Buyun"ostringstream os;os << s1 << s2 << s3 <<s4;cout << os.str();


1 0