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小时内删除。