strstr()与find()均可用于字符串的查找,一个返回的是内存的位置,一个却是目标字符在字符串中的下标。
strstr()
函数原型:
extern char *strstr(char *str1, const char *str2);
str1: 被查找目标
str2: 要查找对象
返回值:若str2是str1的子串,则返回str2在str1的首次出现的地址;如果str2不是str1的子串,则返回NULL。
find()
string中find()返回值是字母在母串中的位置(下标记录),如果没有找到,那么会返回一个特别的标记npos。(返回值可以看成是一个int型的数)。
std::string的查找函数:
find()
rfind() //返回子字符串最后一次出现在字符串中的索引位置
find_first_of() //
find_first_not_of()
find_last_of()
find_last_not_of()
这些操作全都返回 string::size_type 类型的值。
查找
1 #include<cstring>
2 #include<cstdio>
3 #include<iostream>
4 using namespace std;
5 int main()
6 {
7 find函数返回类型 size_type
8 string s("1a2b3c4d5e6f7jkg8h9i1a2b3c4d5e6f7g8ha9i");
9 string flag;
10 string::size_type position=std::string::npos;/*std::string::npos是一个常熟,它等于size_type类型可以表示的最大值,用来表示一个不存在的位置,类型一般是std::container_type::size_type。*/
11 //find 函数 返回jk 在s 中的下标位置
12 position = s.find("jk");
13 if (position != s.npos) //如果没找到,返回一个特别的标志c++中用npos表示,我这里npos取值是4294967295,
14 {
15 printf("position is : %d\n" ,position);
16 }
17 else
18 {
19 printf("Not found the flag\n");
20 }
21 }
提取
提取某个字符串中某两个子字符串之间的字符串(返回“abcdefg”)
1 std::string strPath = "abcdefgabcDEFG"
2 std::string::size_type start = std::string::npos;
3 std::string::size_type end= std::string::npos;
4 start = strPath.find("abc");//返回"abc"字符串首次出现的首字母的下标
5 end = strPath.find_last_of("abc", start+1);//从start后一位开始查找
6 if(start!=-1 && end != -1)
7 {
8 strPath = strPath.substr(start, end-start);//截取自start位置开始,该位置后end-start位数的子字符串
9 }
return strPath;