字符串处理技巧

字符串处理常用技巧

1、find()以及其他查找函数

find()

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在当前串中的位置 //查找成功时返回所在位置,失败返回string::npos的值

rfind()

int rfind(char c, int pos = npos) const;//从pos开始从后向前查找字符c在当前串中的位置 int rfind(const char s, int pos = npos) const; int rfind(const char s, int pos, int n = npos) const; int rfind(const string &s,int pos = npos) const; //从pos开始从后向前查找字符串s中前n个字符组成的字符串在当前串中的位置,成功返回所在位置,失败时返回string::npos的值

find_first_not_of()

int find_first_not_of(char c, int pos = 0) const; 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中的字符出现的位置,失败返回string::npos

find_last_not_of()

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;

//从当前串从后往前查找第一个不在串s中的字符出现的位置,失败则返回string::npos

2、c_str()

可以将string转换为*char类型

3、更改内容

substr(int st,int len)

可以返回st开始len个字符的字符串

+s

在首或尾添加字符串

assign()//可以实现更灵活的赋值

s.assign(str,1,3);//如果str是”iamangel” 就是把”ama”赋给字符串 s.assign(str,2,string::npos);//把字符串str从索引值2开始到结尾赋给s

s.assign(“nico”,5);//把'n' ‘I' ‘c' ‘o' ‘/0'赋给字符串 s.assign(5,'x');//把五个x赋给字符串

append()

s.append(str,1,3);//不解释了 同前面的函数参数assign的解释 s.append(str,2,string::npos)//不解释了 s.append(“nico”,5); s.append(5,'x');

insert()//在某个位置插入字符串

s.insert(0,”my name”);在0处插入字符串 s.insert(1,str);

string &insert(int p0, const char s); string &insert(int p0, const char s, int n); string &insert(int p0,const string &s); string &insert(int p0,const string &s, int pos, int n); //前4个函数在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_iterator last);//在it处插入[first,last)之间的字符 void insert(iterator it, int n, char c);//在it处插入n个字符c

insert()不支持插入单个字符!!

为了插 入单个字符,insert()函数提供了两个对插入单个字符操作的重载函数:insert(size_type index,size_type num,chart c)和insert(iterator pos,size_type num,chart c)。其中size_type是无符号整数,iterator是char*,所以,你这么调用insert函数是不行的:insert(0,1, 'j');这时候第一个参数将转换成哪一个呢?所以你必须这么写:insert((string::size_type)0,1,'j')!

erase()//去除字符串

s.erase(13);//从索引13开始往后全删除 s.erase(7,5);//从索引7开始往后删5个

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

replace()//替换字符串

s.replace(1,2,”nternationalizatio”);//从索引1开始的2个替换成后面的C_string

string &replace(int p0, int n0,const char s);//删除从p0开始的n0个字符,然后在p0处插入串s string &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处插入串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 &replace(iterator first0, iterator last0,const char s);//把[first0,last0)之间的部分替换为字符串s string &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)之间的部分替换为串s string &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)之间的字符串

以上内容大部分引自https://blog.csdn.net/fdqw_sph/article/details/54233971 《c++中的string常用函数用法总结》

4、sscanf()

int sscanf(const char *str, const char *format, ...)

例题:L2-012 关于堆的判断https://pintia.cn/problem-sets/994805046380707840/problems/994805064676261888

使用例子:sscanf(s.c_str(),"%d is %s %s of %d",&a,smp1,smp2,&b);

5、cout输出格式控制

(1)控制符控制输出格式

setbase(n) 设置整数的基数(n只能是8,10,16三者之一)
setfill(c) 设置填充字符c,c可以是字符常量或字符串变量
setpercision(n) 设置实数精度为n位。在以一般十进制小数形式输入时,n表示有效数字。在以fixed(固定小数位数)形式和scientific(指数)形式输出时,n为小数位数。
setw(n) 设置实数的精度为n位
setiosflags(ios::showbase) 输出时显示进制指示符(0表示八进制,0x或0X表示十六进制)
setiosflags(ios::fixed) 设置浮点数以固定的小数位数显示
setiosflags(ios::scientific) 设置浮点数以科学计数法显示
setiosflags(ios::left) 数据左对齐
setiosflags(ios::right) 数据右对齐
setiosflags(ios::skipws) 忽略前导零

(2)流成员函数控制输出格式

同上比较

percision(n)=setpercision(n)
width(n)=setw(n)
fill(c)=setfill(c)
setf()=setioflags()

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!