• StrBtw Función

 #446871  por Pink
 27 Jun 2014, 21:00
Bueno aquí les dejo otra funcion similar a _StringBetween de AutoIt.

lo que hace es sacar una cadena entre dos delimitadores(iguales o diferentes). retorna un puntero a una cadena.

char * StrBtw(const char * str,const char * sD1,const char * sD2)
{
    int iStart=0;
    int iP1=0;
    int iP2=0;
    int iSize=0;
    char *sptr=NULL;
    int i=0;


    if(strcmp(sD1,sD2)==0)
    {
        iStart=1;
    }

    iP1=StringInStr(str,sD1,0);
    iP2=StringInStr(str,sD2,iStart);

    if (!(iP1==-1 || iP2==-1))
    {

        iStart=iP1+strlen(sD1);

        iSize=strlen(str)-strlen(sD1)-strlen(sD2)+1;

        sptr=calloc(iSize,sizeof(char));

        for(i=iStart; i<iP2; i++)
        {
            sptr[i-iStart]=str[i];

        }

    }
    return sptr;
}

int StringInStr(char sString[],char sFind[],int iStart)

{
    int i=0;
    int iPost=0;
    int lensFind=strlen(sFind);
    int lensString=strlen(sString);

    if (lensFind>lensString)
    {
        return -1;
    }

    for (i=iStart; i<lensString; i++)
    {
        if (sString[i]==sFind[iPost])
        {

            iPost++;
            if (iPost==lensFind)
            {
                return i-lensFind+1;
                break;
            }
        }
        else
        {
            iPost=0;
        }
    }

    if (iPost==lensFind)
    {
        return i-lensFind+1;
    }
    else
    {
        return -1;
    }
}
Uso:
#include <stdio.h>
#include <stdlib.h>


int main()
{

    char *str="Como estas Pink ¿Que Haces?";
    char *sD1="estas ";
    char *sD2=" ¿Que";
    char *sptr=NULL;

    sptr=StrBtw(str,sD1,sD2);

    printf(("StringBetween:%s\n ",sptr));

    return 0;
}
Salida: Saludos