这是个小问题。。。find()

回复帖子

@yu__xuan 2019-03-15 20:27 回复
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<queue>
#include<iomanip>
#include<cmath>
#include<ctime>
using namespace std;
int jishu1,jishu2;
string a,b,c,d;
char b1[10001],c1[10001],d1[10001];
int main()
{
    cin>>a;
    int na=a.length();
    for(int i=0;i<na;++i)
    {
        if(jishu1==0&&a[i]==',')
        {
            jishu1=i;
            continue;
        }
        if(a[i]==',')
        {
            jishu2=i;
            break;
        }
    }
    for(int i=0;i<jishu1;++i)
    {
        b1[i]=a[i];
    }
    b=b1;
    for(int j=jishu1+1,i=0;;++i,++j)
    {
        if(j==jishu2) break;
        c1[i]=a[j];
    }
    c=c1;
    for(int j=jishu2+1,i=0;;++i,++j)
    {
        d1[i]=a[j];
        if(j==na) break;
    }
    d=d1;
    int ansc1,ansdn;
    int nc=c.length(),nd=d.length();
    ansc1=b.find_first_of(c);
    cout<<ansc1<<endl;//第一个逗号后面那个字符串在逗号前面那个字符串中第一次出现的位置。。
    int ansc1w=ansc1+nc-1;
    ansdn=b.find_last_of(d);
    int ansdnt=ansdn-nd+1;
    if((b.find(c)==string::npos)||(b.find(d))==string::npos)       //看要找的字符串是否存在 
    {
        cout<<-1;
        return 0;
    }
    if(ansc1>=ansdn)
    {
        cout<<-1;
        return 0;
    }
    if(ansc1w>=ansdnt)
    {
        cout<<-1;
        return 0;
    }
    if((ansc1w+1)==ansdnt)
    {
        cout<<0;
        return 0;
    }
    int ans=0;
    for(int i=ansc1w+1;i<ansdnt;++i)
    {
        ans++;
    }
    /*cout<<ans;*/
    return 0;
}

输入:abaab,ba,ab

@yu__xuan 2019-03-15 20:31 回复

求解,不应该是输出1吗???

@yu__xuan 2019-03-15 21:23 回复

明白了

find_first_of()及find_last_of()查找的是单个字符。。