s.substr(pos,n)//返回一个string,包含s中从pos开始的n个字符的拷贝。pos的默认值为0,n的默认为s.size()-pos,拷贝从 pos 开始的所有字符。
例子:string s(“hello world”);
string s2=s,substr(0,5);//s2=hello
string s3=s,substr(6);//s3=world
string s4=s.substr(6,11);s3=world
string s5=s.substr(12);//抛出out_of_range异常
s.insert(pos,args)//在pos 之前插入args 指定的字符,pos可以是一个下标或一个迭代器。接受下标的版本返回一个指向s的引用,接受迭代器的版本返回一个指向第一个插入字符的迭代器
例子:
s.insert(s.size(),5,'!')//在s 末尾插入5个感叹号。
s. assign(pos,len) //将s 中的字符替换为args指定的字符,返回一个指向s 的引用。
//例子
const char *cp="stately,plum Buck"
s.assign(cp,7)//s=="stately"
s.insert(s.size(),cp+7);
//s=="stately,plum Buck"将cp 指向的字符数插到s[size()]之前
s.erase(pos,len) //删除从位置pos开始的len 个字符。如果len被省略,则删除从pos 开始直至s末尾的所有字符。返回一个指向s 的引用。
//例子
s.erase(s.zize()-5,5);//从s 删除最后5个字符
s.append(args) 将args追加到s.返回一个指向s的引用。
//例子
string("c++ Primer"),s2=s;//将s和s2 初始化为 "c++ Primer"
s.insert(s.size(),"4th Ed.")//s=="c++ Primer 4th Ed."
s2.append("4th Ed.")//将args 追加到s2,返回s2 的引用。
s.replace(range,args)//删除 s中范围range内的字符,替换为args指定的字符。range 或者是一个下标长度,或者是一对指向s的迭代器。返回一个指向s 的引用。
//例子
string s("c++ Primer 5th Ed.");
s.replace(11,3,"Fifth");//s="c++ Primer Fifth Ed."//从位置13开始,删除3个字符并插入“Fifth”
string 搜索函数(搜索操作返回指定字符出现的下标,如果未找到,则返回npos)
s.find(args)//查找s 中args 第一次出现的位置
s.rfind(args)//查找s 中args最后一次出现的位置
s.find_first_of(args) //在s 中查找args 中任何一个字符出现的出现的位置;
s.find_last_of(args) //在s 中查找args 中任何一个字符最后一次出现的位置。
s.find_first_not_of(args) //在s 中查找第一个不在args 中的字符
s.find_last_not_of(args)//在s 中查找最后一个不在args 中的字符
args 必须是以下形式之一
1,c,pos 从s 中pos 位置开始查找字符c.pos默认为0.
1,c,pos 从s 中pos 位置开始查找字符c.pos默认为0.
2,s2,pos 从s 中位置pos 开始查找字符串s2.pos 默认为0
3,cp,pos 从s 中开始查找指针cp 指向的以空字符结尾的c风格的字符串。pos默认为0
3,cp,pos 从s 中开始查找指针cp 指向的以空字符结尾的c风格的字符串。pos默认为0
4,cp,pos,n 从s 中位置开始查找指针cp 指向的数组的前n个字符。pos 默认为0.
举例:
string name("AnnaBelle");
auto pos1=name.find("Anna");//pos1=0
auto pos2=name.find(“anna”)//pos2=npos
string numbers("0123456789"),name("r2d2");
auto pos=name.find_first_of(numbers)//pos=1
string dept("03714p3");
auto pos=dept.find_first_not_of(number);
//pos=5;搜索非数字字符
指定在哪里搜索
我们可以给find函数一个参数指定从哪里搜索
例如:
string::size_type pos=0;
while(pos=name.find_first_of(number,pos)&&pos!=string::npos){
cout<<name[pos]<<endl;
pos++;
}
逆向搜索
string river("Mississippi");
auto first_pos=river.find(is)//pos=1
auto first_pos=river.rfind(is)//pos=4
find_last函数和find_first相似。只是他是匹配的最后的一个元素