【July程序员编程艺术】之现场编写类似strstr/strcpy/strpbrk的函数

时间:2023-02-12 09:57:34

这一节主要是实现一些C库中的库函数,比较简单,只要注意好细节即可。本节我只用C++实现了strstr和findfirst,其他的以后有时间再去实现

#include <iostream>
#include <string>
using namespace std;
int strstr(string & lstr,string & sstr);
char findfirst(string & str);
int strstr(string & lstr,string & sstr)
{
    char * pointa,* pointb;
    int la = lstr.length();
    int lb=sstr.length();
    int j=0,i=0;
    while(i<la)
    {   
        if(lstr[i]==sstr[0])
        {
            for(j=1;j<lb;j++)
            {
                if((lstr[i+j]!=sstr[j])||(i+j==la))
                {
                    i=i+j;
                    break;
                }
            }
        if((j==lb))
                return i;
        }
        else
            i++;



    }
    return 0;
}

char findfirst(string & str)
{
    int tmp[256]={0};
    int len = str.length();
    char f ='a';
    for(int i=0;i<len;i++)
    {
        tmp[str[i]-'a']++;
    }
    for(int i=0;i<256;i++)
    {
        if(tmp[i]==1)
            return f+i;
    }
    return '0';
}

void main()
{
    string a("ABCD");
    string b("CD");
    int res = strstr(a,b);
    cout << res << endl;
}