Oppure

Loading
31/08/11 12:11
RENOOB
volevo fare pratica con le array e i puntatori, così ho creato una funzione che estrapolasse una frase se preceduta e terminata da un determinato separatore.

nonostante nella funzione il risultato è corretto, quello restituito è sballato da dei caratteri altrettanto strani.
il punto è che non capisco cosa lo causa, non sembra essere un problema del codice :-|

#include <iostream>

using namespace std;

 typedef struct SET
    {
        char* strE;
        char* simE;
        int pIdsE;
        char* retE;
    };

char* StrEx(SET &SOT)
{

    char* str = SOT.strE;
    char* sim = SOT.simE;
    int pIdS = SOT.pIdsE;

    int pDs = 0;
    int nSimMin = -1;
    int nSimMax = -1;
    int nStrC = strlen(str);
    int nSimC = strlen(sim);

    for (int i=0;i<nStrC;i++)
    {
        if (str[i] == sim[0])
        {
            if (i <= nStrC-nSimC)
            {
                for (int b = 1;b < nSimC;b++)
                {
                    if (str[i+b] == sim[b])
                    {
                        nSimMin = i;
                    }
                    else
                    {
                        nSimMin = -1;
                        break;
                    }
                }

                if(nSimMin != -1)
                {
                  i = i+nSimC;
                  nSimMin = nSimMin+nSimC;

                for (i;i<nStrC;i++)
                {
                    if(str[i] == sim[0])
                    {

                        if (i <= nStrC-nSimC)
                        {
                            for (int b = 1;b < nSimC;b++)
                            {

                                if (str[i+b] == sim[b])
                                {
                                    nSimMax = i;
                                }
                                else
                                {
                                    nSimMax = -1;
                                    break;
                                }
                            }
                            break;
                        }

                    }
                }
                }
                if (nSimMax == -1 || nSimMin == nSimMax)
                {
                    break;
                }

                if (nSimMax != -1) {i = i+nSimC; pDs++;}
                if (pIdS == pDs)
                {

                    int doE = nSimMax-nSimMin;
                    char res[doE];
                    for(int iE=nSimMin;iE<nSimMax;iE++)
                    {
                    res[iE-nSimMin] = str[iE];
                    }
                    cout << res << "\n";
                    SOT.retE = res;
                    return res;

                }
                nSimMax = -1;
                nSimMin = -1;

            }
        }
    }
}






int main()
{

    //FILE* pf;
    //pf = fopen("ciao.txt","r");
    //char read[10064];
    //fscanf(pf,"%s",read);
    //fclose(pf);
    char* read = "<^{`[\"(~|1006SOURCE1006|~)\"]`}^>valore<^{`[\"(~|1006SOURCE1006|~)\"]`}^>";

    SET ptr;
    ptr.strE = read;
    ptr.simE = "<^{`[\"(~|1006SOURCE1006|~)\"]`}^>";
    ptr.pIdsE = 1;

    cout << StrEx(ptr) << "\n";
    cout << ptr.retE << "\n";

    //pf = fopen("hallo.txt","w");
    //fprintf(pf,"%s", ptr.retE);
    //fclose(pf);

    //system("notepad hallo.txt");

    system("pause");
    return 0;
}


in allegato troverete ciò che stampa... non so come spiegarmelo.
aaa
31/08/11 13:48
HeDo

secondo me il codice che hai scritto è un overkill, ho già implementato una cosa di questo genere e non andava oltre le 10 righe
aaa
31/08/11 14:59
RENOOB
definisci overkill
aaa
31/08/11 17:36
HeDo
aaa
31/08/11 18:23
pierotofy
Usare le regex no? en.wikipedia.org/wiki/…
Il mio blog: piero.dev