string
C++标准库中定义了一个string类,用来处理可变长字符序列。使用string类要包含头文件,string定义在命名空间std中;
#include<string> using namespace std;
1、string的定义和初始化
string str1; //定义
string str2 = str1; //复制赋值
string str3 = "abcde"; //直接赋值
string str4(char* str); //字符串指针初始
string str5(5,'c'); //str5的内容为ccccc
2、string对象基本操作
cin >> str; //标准输入
cout << str; //标准输出
str.empty(); //字符串是否为空
str.size(); //字符串大小
str.length(); //字符串长度和size一样
str[n]; //字符串第n个字符,类似于数组
str.c_str(); //string类型转char*
3、string操作符
str1+str2 //字符串连接,string也可以直接加上一个字符
str1 == str2 //字符串相等
str1 != str2 //字符串不相等
< > <= >= //字符串大小比较,区分大小写
4 、注意事项及常用函数
string的遍历和数组类似str[i],这里得到的是一个char类型字符,当用地址&str[i]获取时获取的是第i个字符及之后的字符,不是一个字符。
连接函数(如果是char类型一般为指针,string类型一般为引用,返回的是引用):
string &operator+=(const string &s);//把字符串s连接到当前字符串的结尾
string &append(const string &s); //同operator+=()
string &append(int n,char c); //在当前字符串结尾添加n个字符c
string &append(const string &s,int pos,int n);//把字符串s中从pos开始的n个字符连接到当前字符串的结尾
string &append(const char *s); //把c类型字符串s连接到当前字符串结尾
string &append(const char *s,int n);//把c类型字符串s的前n个字符连接到当前字符串结尾
子串:
string substr(int pos = 0,int n = npos) const;//返回pos开始的n个字符组成的字符串,没有指明第二个参数时默认到字符串结尾
查找(成功返回的是位置,没找到返回string::npos):
int find(char c, int pos = 0) const;//从pos开始查找字符c在当前字符串的位置
int find(const string &s, int pos = 0) const;//从pos开始查找字符串s在当前串中的位置
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 rfind(char c, int pos = npos) const;//从pos开始从后向前查找字符c在当前串中的位置
int rfind(const string &s,int pos = npos) const;
//查找成功时返回所在位置,失败返回string::npos的值
交换:
void swap(string &s2); //交换当前字符串与s2的值
替换:
string &replace(int p0, int n0,const string &s);//删除从p0开始的n0个字符,然后在p0处插入串s
string &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 &insert(int p0,const string &s);
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
删除:
string &erase(int pos = 0, int n = npos);//删除pos开始的n个字符,返回修改后的字符串
string类中还定义很多函数,用于string的不同类型的处理和应用。
详细参考:http://www.cnblogs.com/xFreedom/archive/2011/05/16/2048037.html
5、string,ctring,string.h的关系
要了解这几个头文件的关系,首先需要了解C++和C头文件的关系:C++标准库除了定义C++语言特有的功能外,也兼容了C语言的标准库,C语言的头文件如name.h,C++则将这些文件定义为cname。就是去掉了.h,在文件名之前加了c。
因此cctype和ctype.h头文件的内容是一样的,只不过从命名规范来说更符合C++的规范要求,特别的,在cname的头文件中定义的名字从属于命名空间std,而.h则不是。总的来说,C++中最好用c开头的文件而不是.h,这样更符合规范,用.h也无所谓,内容是一样的。
从上面来说,cstring和string.h包含的内容都是一样的,都是C语言中定义的一些字符串处理函数等,而string则是C++中定义的一个处理字符串的类,与前面两个是完全不同的。
stringstream
在编程过程中经常会遇到类型转换的问题,例如需要将5这个int类型的数字转换为字符串“5”,在C中有一些方法可以实现,但并不好用。C++中定义了一个类stringstream,这个类对象可以很好的实现类型转换,这个类被定义在头文件sstream中,因此应用时需要包含头文件
#include <sstream>
stringstream ss; //定义对象
string str;
ss<<4;
ss>>str;
每次用完stringsteam对象后,再次使用前可以用clear()清除之前的内容。
详细参考:http://blog.youkuaiyun.com/xw20084898/article/details/21939811