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
in allegato troverete ciò che stampa... non so come spiegarmelo.
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