f()
这些函数返回符合搜索条件的字符区间内的第一个字符的索引,没找到目标就返回npos。所有的函数的参数说明:
第一个参数是被搜寻的对象。第二个参数(可有可无)指出string内的搜寻起点索引,第三个参数(可有可无)指出搜寻的字符个数。
find()与rfind()
string a="123456789abcdefgab";
string b="789abc";
如果找不到则返回的值为string::npos
/*if(a.find('k')==string::npos){cout<<"没有找到"<<endl;}*/
1.在字符串中查找某一个字符
(1).从字符串开始位置开始查找
auto s=a.find('a'); //结果为 s=9;
//表明a在字符串中从左向右第一次出现的位置的下标为9
(2).从字符串某一个位置开始查找
auto s=a.find('a',11); //结果为 s=16
//从字符串下标为11的地方开始查找字符
2.在字符串中查找某一个子串
(1).从字符串开始位置开始查找
auto s=a.find("9a");//结果为 s=8;
//表明9a子串的第一个字符在字符串中从左向右第一次出现的位置下标为8
auto s=a.find(b); //结果为 s=6;
(2).从字符串某一个位置开始查找
auto s=a.find("ab",11); //结果为 s=16
//从字符下标为11的地方开始向后查找
3.在字符串中查找子串的前n个字符
auto s=a.find("abcd",11,2); //结果为 s=16;
//解释:在字符串a中查找,子串"abcd"的前2个字符即在字符串a中查找"ab"
//注意 在这个重载函数中,第一个参数只能是char* 类型,而不能是string类型
4.find()与rfind()的区别
find()是字符串从前向后查找,rfind()是字符串从后向前查找,其他的用法与find()函数类似
find_first_of()与find_last_of()
string a="123456789abcdefgh";
1.在字符串中查找某一个字符
auto s=a.find_first_of('5');//结果为 s=4;
auto s=a.find_first_of('5',5); //没有查找到 s=string::npos;
//如果查找某一个字符,与find()函数类似
2.在字符串中查找子串
//此时与find()函数不同,find()函数是查找子串,
//而find_first_of()函数是查找字符串a中含有的任意子串的字符
auto s=a.find_first_of("8a"); //结果为 s=7;
auto s=a.find_first_of("8a",1); //结果为 s=7;
//在字符串a中查找最早出现的字符'8'或者'a';
auto s=a,find("8a"); //结果是找不到
auto s=a,find("8a",1); //结果是找不到
//find()函数查找子串必须是相连的,而find_first_of()不需要,只要字符串中含有子串的字就可以
/*重要
*find_first_of()函数在字符串中查找子串中出现的任意字符,比如在字符串 "12abc"中查找子串"1k",1在字符串"12abc"中出现过,所以可以找到
*find()函数在字符串"12abc"中查找"1k",则查找不到,它查找的必须是"1k"这两个相连的字符
*/
3.find_first_of()与find_last_of()的区别
find_first_of()是从前向后查找,而find_last_of()是从后向前查找。其他的用法与find_first_of()函数类似。
find_first_not_of()与find_last_not_of()
find_first_not_of()与find_first_of()功能正好相反。不懂得可以先看我写的find_first_of()函数功能详解
find_firat_of()函数是在字符串中查找子串出现过的任意字符,也可以所字符串与子串都有的字符。
find_first_not_of()函数是在字符串中查找子串没有出现过的任意字符,也可以说是,字符串中有而子串中没有的字符
//以上查找的结果都是最先出现的那个字符的下标
//例
string a="12345";
auto s=a.find_first_not_of("1238"); //结果为 s=3;
//a字符串中有,而子串没有的是"45",而'4'字符是最先出现的,它的下标为3
find_first_not_of(str,n);
//str是子串,n是从下标为n的字符开始查找
find_first_not_of(str,n,m);
//str是子串,n是从下标为n的字符开始查找
//m是只看str子串的前m位字符
find_first_not_of()与find_last_not_of()查找顺序正好相反,
find_first_not_of()是从前向后,find_last_not_of()是从后向前查找
//如果以上看不懂的话建议先从find(),rfina()函数看起,之后再看find_first_of()与find_last_of(),最后看find_first_not_of()与find_last_not_of()
最后再说说npos的含义,string::npos的类型是string::size_type,所以,一旦需要把一个索引与npos相比,这个索引值必须是string::size)type类型的,更多的情况下,我们可以直接把函数和npos进行比较(如:if(s.find("jia")== string::npos))。
s.substr();//返回s的全部内容
s.substr(11);//从索引11往后的子串
s.substr(5,6);//从索引5开始6个字符
// 获取file的后缀
void Teststring1(){
string file("string.cpp");
size_t pos = file.rfind('.');
string suffix = file.substr(pos);
cout << suffix << endl;
}
// 取出url中的域名
void Teststring2(){