in pratica esiste una funzione di <string.h> che mi da il numero di occorrenze di un carattere ( o di una stringa ) all' interno di un' altra stringa ?
grazie![]()
in pratica esiste una funzione di <string.h> che mi da il numero di occorrenze di un carattere ( o di una stringa ) all' interno di un' altra stringa ?
grazie![]()
http://forum.html.it/forum/showthrea...hreadid=753477Originariamente inviato da andr3a
in pratica esiste una funzione di <string.h> che mi da il numero di occorrenze di un carattere ( o di una stringa ) all' interno di un' altra stringa ?
grazie![]()
con un semplice ciclo usando questa funzione puoi creartela tu.char *strchr(const char *s, int c);
cerca un carattere c nella stringa s e torna il puntatore a quel
carattere o null
(se devi cercare una stringa usa
char *strstr(const char *s1, const char *s2);
trova la prima sottostringa s2 in s1
)
uhm ... io me la sono creata per i fatti miei ed ecco cosa ho scritto ...Originariamente inviato da kentaromiura
con un semplice ciclo usando questa funzione puoi creartela tu.
funziona bene, pero' non so come inviare un solo carattere, per ora ho ovviato sapendo che il carattere e' uno solo e creando un' altra variabile tipocodice:int conta_occorrenze( char *stringa, char *cerca ) { int a, b, c; int occorrenze = 0; int caratteri_da_allocare = strlen(cerca); int caratteri_da_leggere = strlen(stringa); char *controllo; controllo = (char *) calloc( (caratteri_da_allocare+1), sizeof(char) ); for(a=0;a<caratteri_da_leggere;a++) { for(b=0,c=a;b<caratteri_da_allocare;b++) { if(stringa[c]!='\0') { controllo[b] = stringa[c++]; } else { b = caratteri_da_allocare; } } controllo[b] = '\0'; if(strcmp(cerca,controllo)==0){ occorrenze++; } } return occorrenze; }
char stringa_incognita[2];
stringa_incognita[0] = CARATTERE_CONOSCIUTO;
stringa_incognita[1] = '\0';
e poi invio la ricerca, vorrei automatizzare al fine di ricreare precisamente la funzione substr_count di PHP ( ovvero non importa che invio un solo carattere o una stringa )
consigli ???
per ora grazie per l' utilissimo link![]()
![]()
eccotela:Originariamente inviato da andr3a
uhm ... io me la sono creata per i fatti miei ed ecco cosa ho scritto ...
funziona bene, pero' non so come inviare un solo carattere, per ora ho ovviato sapendo che il carattere e' uno solo e creando un' altra variabile tipocodice:int conta_occorrenze( char *stringa, char *cerca ) { int a, b, c; int occorrenze = 0; int caratteri_da_allocare = strlen(cerca); int caratteri_da_leggere = strlen(stringa); char *controllo; controllo = (char *) calloc( (caratteri_da_allocare+1), sizeof(char) ); for(a=0;a<caratteri_da_leggere;a++) { for(b=0,c=a;b<caratteri_da_allocare;b++) { if(stringa[c]!='\0') { controllo[b] = stringa[c++]; } else { b = caratteri_da_allocare; } } controllo[b] = '\0'; if(strcmp(cerca,controllo)==0){ occorrenze++; } } return occorrenze; }
char stringa_incognita[2];
stringa_incognita[0] = CARATTERE_CONOSCIUTO;
stringa_incognita[1] = '\0';
e poi invio la ricerca, vorrei automatizzare al fine di ricreare precisamente la funzione substr_count di PHP ( ovvero non importa che invio un solo carattere o una stringa )
consigli ???
per ora grazie per l' utilissimo link![]()
![]()
codice:substr_count(char* s1,char*s2){ int l=strlen(s2); int c=0; while(s1!=NULL){ s1=strstr(s1,s2); if(s1!=null){ s1+=l; c++; } } return c; }
ok funziona ma sono terrorizzato dal fatto che non abbiamo visto strstr e magari il prof se la prende a male se uso cose che non ha spiegatoOriginariamente inviato da kentaromiura
eccotela:
codice:substr_count(char* s1,char*s2){ int l=strlen(s2); int c=0; while(s1!=NULL){ s1=strstr(s1,s2); if(s1!=null){ s1+=l; c++; } } return c; }![]()
mi spieghi pero' che diamine fa quell' strstr ???
cioe'
s1 = strstr(s1,s2)
// trova la prima sottostringa s2 in s1
e fin qui ok ...
ma poi cosa significa questo ???
s1+=l;
cioe' ad una sottostringa aggiungi senza cast un intero ?
e che fine ha fatto s1 ???
vorrei solo essere certo che questo metodo rispetti gli standard ansi, come il mio dovrebbe fare, m'hanno gia' "non ammesso" una volta per sboronate mie su cose per me normali e per lui incomprensibili ...![]()
comunque grazie![]()
sì è definita dallo standard ANSI per il C
http://www.cplusplus.com/ref/cstring/strstr.html
...Terrible warlords, good warlords, and an english song
ok, e il += (int) invece e' ANSI pure quello ? cosa fa di preciso ?Originariamente inviato da Johnny_Depp
sì è definita dallo standard ANSI per il C
http://www.cplusplus.com/ref/cstring/strstr.html![]()
s1+s1=l
è uguale a
s1+=l // meglio scriverlo così (ANSI C)
...Terrible warlords, good warlords, and an english song
sommo l all'indice del puntatore di una stringaOriginariamente inviato da andr3a
ok, e il += (int) invece e' ANSI pure quello ? cosa fa di preciso ?![]()
esempio
se *p punta a "Sei un Fagianazzo"
dopo un
p+=7
*p punterà a Fagianazzo
..aritmetica dei puntatori.
posso sbavarti ?Originariamente inviato da kentaromiura
sommo l all'indice del puntatore di una stringa
esempio
se *p punta a "Sei un Fagianazzo"
dopo un
p+=7
*p punterà a Fagianazzo
..aritmetica dei puntatori.![]()
![]()
italianizzando questa va bene ?
senza il != NULL che mi sa di ridondante :master:codice:int conta_occorrenze( char *stringa, char *cerca ) { int lunghezza_cerca = strlen(cerca); int occorrenze = 0; while(stringa) { stringa = strstr(stringa,cerca); if(stringa) { stringa += lunghezza_cerca; occorrenze++; } } return occorrenze; }
grazie![]()