stl库⾥的find函数⽤法
1.string中find()返回值是字母在母串中的位置(下标记录),如果没有到,那么会返回⼀个特别的标记npos。(返回值可以看成是⼀个int 型的数)
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;
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 }
2.返回⼦串出现在母串中的⾸次出现的位置,和最后⼀次出现的位置。
1 flag = "c";
2 position = s.find_first_of(flag);
字符串函数注册登录3 printf("s.find_first_of(flag) is :%d\n",position);
4 position = s.find_last_of(flag);
5 printf("s.find_last_of(flag) is :%d\n",position);
3.查某⼀给定位置后的⼦串的位置
1 //从字符串s 下标5开始,查字符串b ,返回b 在s 中的下标
2 position=s.find("b",5);
3 cout<<"s.find(b,5) is : "<<position<<endl;
4.查所有⼦串在母串中出现的位置
//查s 中flag 出现的所有位置。
flag="a";
position=0;
int i=1;
while((position=s.find_first_of(flag,position))!=string::npos)
{
cout<<"position "<<i<<" : "<<position<<endl;
position++;
i++;
}
5.反向查⼦串在母串中出现的位置,通常我们可以这样来使⽤,当正向查与反向查得到的位置不相同说明⼦串不唯⼀。
1 //反向查,flag 在s 中最后出现的位置
2 flag="3";
3 position=s.rfind (flag);
4 printf("s.rfind (flag) :%d\n",position);
例题:1.给出⼀个字符串,串中会出现有⼈名,到⼀个只有⼀个⼈名的字符串。
1 #include <bits/stdc++.h>
2 using namespace std;
3 vector<string> s;
4 int main()
5 {
6 s.push_back("Danil");
7 s.push_back("Olya");
8 s.push_back("Slava");
9 s.push_back("Ann");
10 s.push_back("Nikita");///建⽴动态数组
11 string a;
12 cin>>a;
13 int res = 0;
14 for(int i = 0; i < 5; i++)
15 {
16 if(a.find(s[i]) != a.npos)
17 {
18 res++;
19 if(a.rfind(s[i]) != a.find(s[i]))///⼀个字符中出现多个⼀样的名字
20 {
21 res++;
22 }
23 }
24 }
25 if(res == 1)
26 {
27 cout<<"YES"<<endl;
28 }
29 else
30 {
31 cout<<"NO"<<endl;
32 }
33 return 0;
34 }
2.你有n个字符串。每个字符串由⼩写英⽂字母组成。重新排序给定的字符串,使得对于每个字符串,在它之前的所有字符串都是它的⼦串。
1 #include<string>
2 #include<cstdio>
3 #include<algorithm>
4 #include<iostream>
5 using namespace std;
6 bool cmp(string a, string b)
7 {
8 if (a.length() == b.length())
9 return a < b;
10 return a.length() < b.length();
11 }
12 int main()
13 {
14 int n;
15 string s[111];
16 scanf("%d", &n);
17 for (int i = 0; i < n; i++)
18 {
19 cin >> s[i];
20 }
21 sort(s, s + n, cmp);
22 int flag = 1;
23 for (int i = 1; i < n; i++)
24 {
25 if (s[i].find(s[i-1]) == string::npos)
26 {
27 flag = 0;
28 break;
29 }
30 }
31 if (flag)
32 {
33 cout << "YES" << endl;
34 for (int i = 0; i < n; i++)
35 {
36 cout << s[i] << endl;
37 }
38 }
39 else
40 {
41 cout << "NO" << endl;
42 }
43 return 0;
44 }
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论