代码改变世界

std::string

2017-11-15 12:03  清晨、午后  阅读(461)  评论(0编辑  收藏  举报
1. 截取子串
s.substr(pos, n)    //截取s中从pos开始(包括pos,不包括n)的n个字符的子串,并返回
s.substr(pos)        //截取s中从从pos开始(包括pos)到末尾的所有字符的子串,并返回

2. 替换子串

 s.replace(pos, n, s1)    //用s1替换s中从pos开始(包括0)的n个字符的子串

3. 查找子串

返回字符串s1在s中的位置,

std::string  的方法 find,返回值类型是std::string::size_type, 对应的是查找对象在字符串中的位置(从0开始),

如果未查找到,该返回值是一个很大的数据(4294967295),判断时与 std::string::npos 进行对比

std::string str("abcdefg");
std::string::size_type pos = str.find("abc");
if (pos != std::string::npos)
{
    cout << "Not find" << endl;
}
或

std::string str("abcdefg");
if (str.find("abc") != std::string::npos)
{
    cout << "Not find" << endl;
}
 

很多同学由于经常使用 CString 的缘故,喜欢这样写

std::string str("abcdefg");
int pos = str.find("abc");
if (pos < 0)
{
    cout << "Not find" << endl;
}
这样写理论上也是可以的,因为 size_type 相当于 unsigned int类型,最大值4294967295强制转换为int型,就是-1

但下面的写法是错误的:

std::string str("abcdefg");
if (str.find("abc") < 0)  //错误,应该写成  != std::string::npos
{
    cout << "Not find" << endl;
}


最后,建议使用size_type,这样可以适应不同的平台。因为int 类型的大小会根据不同平台而不同。

 

s.find(s1)          //查找s中第一次出现s1的位置

s.find(s1,a);       //从字符串s下标为a开始查找字符串s1,返回起始位置,查找时包含a位


s.rfind(s1)         //查找s中最后次出现s1的位置

s.rfind(s1,a);     //从字符串s下标为a开始反向查找字符串s1,返回起始位置,查找时包含a位


s.find_first_of(s1)      //查找在s1中任意一个字符在s中第一次出现的位置

s.find_last_of(s1)       //查找在s1中任意一个字符在s中最后一次出现的位置


s.fin_first_not_of(s1)        //查找s中第一个不属于s1中的字符的位置

s.fin_last_not_of(s1)         //查找s中最后一个不属于s1中的字符的位置

 

 4.清除全部或部分字符

erase函数的原型如下:
(1string& erase ( size_t pos = 0, size_t n = npos );
(2)iterator erase ( iterator position );
(3)iterator erase ( iterator first, iterator last );
(4string& erase()
也就是说有4种用法:
(1)erase(pos,n); 删除从pos开始的n个字符,比如erase(0,1)就是删除第一个字符
(2)erase(position);删除position处的一个字符(position是个string类型的迭代器)
(3)erase(first,last);删除从first到last之间的字符(first和last都是迭代器)
(4)erase();全部清除

 5.获取字符串长度

size()
返回值类型:size_type

 

6.插入字符串

string的成员函数insert有以下多种重载:

string &insert(int p0, const char *s);    //在p0位置插入字符串s

string &insert(int p0, const char *s, int n);  //在p0位置插入字符串s的前n个字符

string &insert(int p0,const string &s);  //在p0位置插入字符串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

iterator insert(iterator it, char c);  //在it处插入字符c,返回插入后迭代器的位置

void insert(iterator it, const_iterator first, const_iteratorlast);  //在it处插入从first开始至last-1的所有字符

void insert(iterator it, int n, char c);  //在it处插入n个字符c