[C]Domanda su funzione
Ciao sono alle prime armi con il c. Devo scrivere una funzione:
int trova(char * stringa, char carattere): riceve in
input una stringa e un carattere e "ritorna" in ouput la posizione del
carattere (es. trova("cipolla", 'o') e' uguale a 3). N.B.: se carattere non viene trovato in stringa allora viene ritornato -1.
Io farei :
Però ho due problemi :
-il primo carattere è uguale
-appena trova un carattere uguale esce giusto( se io ho tipo olio e o)....
int trova(char * stringa, char carattere): riceve in
input una stringa e un carattere e "ritorna" in ouput la posizione del
carattere (es. trova("cipolla", 'o') e' uguale a 3). N.B.: se carattere non viene trovato in stringa allora viene ritornato -1.
Io farei :
while(carattere != s[i]){ i++; if(carattere=s[i]){ i++; printf("posizione %d",i)...
Però ho due problemi :
-il primo carattere è uguale
i=1mentre dovrebbe essere
i=0;
-appena trova un carattere uguale esce giusto( se io ho tipo olio e o)....

Risposte
Primo problema: prima di fargli iniziare il ciclo, devi inizializzare la variabile.
Cioè, devi attribuirle il valore che vuoi che abbia, altrimenti potrebbe assumere valori strani e non voluti.
Per fare ciò, puoi inserire un comando
c=1
prima del ciclo while.
Oppure, aggiungerlo nella printf, in questo modo:
printf("Posizione %d", i+1);
Secondo problema: deve essere chiaro quale sia l'obiettivo della tua funzione.
Vuoi che ti restituisca la posizione del primo carattere che incontra o quella dell'ultimo?
Cioè, devi attribuirle il valore che vuoi che abbia, altrimenti potrebbe assumere valori strani e non voluti.
Per fare ciò, puoi inserire un comando
c=1
prima del ciclo while.
Oppure, aggiungerlo nella printf, in questo modo:
printf("Posizione %d", i+1);
Secondo problema: deve essere chiaro quale sia l'obiettivo della tua funzione.
Vuoi che ti restituisca la posizione del primo carattere che incontra o quella dell'ultimo?
Di tutti quelli che incontra .. Esempio olio o la o sta nella posizione 0 e nella posizione 4
"fra89":
Di tutti quelli che incontra .. Esempio olio o la o sta nella posizione 0 e nella posizione 4
come 0 e 4 ?
intendi dire 1 e 4 ? oppure 0 e 3 ?
Si dai 0 e 3 scusate ho sbagliato a scrivere.
"fra89":
Si dai 0 e 3 scusate ho sbagliato a scrivere.
ok.
l'indice del vettore sara' sempre da 1 fino a n, ti conviene quindi sottrarre 1 dal risultato
Nell'esempio di olio:
1 diventa 0
il 4 diventa 3
ok.
devi risolvere ancora il problema del -1.

Vabè. Quella è minima cosa...Cmq sto provando con un ciclo for e con un if all'interno:
INT TROVA(CHAR* STRINGA,CHAR CARATTERE){ INT I; FOR(I=0;I<QUANTI;I++){ IF(CARATTERE= S[I]){ PRINTF("IL CARATTERE E ALLA POSIZIONE %D",I-1); } }
Se fai in questo modo, la funzione restituisce un -1 per ogni carattere che non sia quello cercato...
"fra89":
Vabè. Quella è minima cosa...Cmq sto provando con un ciclo for e con un if all'interno:
posiziona una variabile a -1
quando trovi un carattere valido azzera questa variabile
alla fine se questa variabile è ancora a -1, significa che non hai trovato nessun carattere valido ....
Ci sono diversi errori nel codice che hai postato:
1. Scrivi i codici in minuscolo, il C distingue lettere minuscole e maiuscole e le parole chiave sono misuscole. Inoltre è più leggibile.
2.
Se s è diverso da zero questa riga è sempre vera!!! carattere = s, copia il valore di s in carattere. Per sapere se s è uguale a carattere si usa ==.
3. QUANTI non è stata definita da nessuna parte della funzione. A cosa si riferisce?
4. Perché visualizzi (i-1)? Gli indici negli array partono da 0 in C. Se quindi la tua funzione incontrasse il carattere nella prima posizione stamperebbe -1.
Non ho capito bene cosa devi fare. Il tipo della funzione e la descrizione del primo post mi faceva pensare che tu dovessi cercare il primo carattere uguale a quello passato come argomento e restituire l'indice corrispondente, o -1 in caso di fallimento. Ma in seguito sembra che tu stia cercando di scrivere una funzione che stampa tutte le posizioni in cui si trova un carattere. Ti scrivo il codice commentato della funzione che esce una volta trovato il primo carattere, ti lascio per esercizio (se era questo quello che dovevi fare) l'altro.
Ho deciso di scriverti il codice perché eri comunque abbastanza vicina alla soluzione e spiegandoti come avresti dovuto farlo l'avrei comunque dovuto scrivere quasi tutto. Se hai dei dubbi chiedi pure.
1. Scrivi i codici in minuscolo, il C distingue lettere minuscole e maiuscole e le parole chiave sono misuscole. Inoltre è più leggibile.
2.
if (carattere = s[i]) {
Se s è diverso da zero questa riga è sempre vera!!! carattere = s, copia il valore di s in carattere. Per sapere se s è uguale a carattere si usa ==.
if (carattere == s[i]) {
3. QUANTI non è stata definita da nessuna parte della funzione. A cosa si riferisce?
4. Perché visualizzi (i-1)? Gli indici negli array partono da 0 in C. Se quindi la tua funzione incontrasse il carattere nella prima posizione stamperebbe -1.
Non ho capito bene cosa devi fare. Il tipo della funzione e la descrizione del primo post mi faceva pensare che tu dovessi cercare il primo carattere uguale a quello passato come argomento e restituire l'indice corrispondente, o -1 in caso di fallimento. Ma in seguito sembra che tu stia cercando di scrivere una funzione che stampa tutte le posizioni in cui si trova un carattere. Ti scrivo il codice commentato della funzione che esce una volta trovato il primo carattere, ti lascio per esercizio (se era questo quello che dovevi fare) l'altro.
Ho deciso di scriverti il codice perché eri comunque abbastanza vicina alla soluzione e spiegandoti come avresti dovuto farlo l'avrei comunque dovuto scrivere quasi tutto. Se hai dei dubbi chiedi pure.