JackieJack1207 ha scritto:
oregon ha scritto:
K&R
e dai ... almeno le iniziali corrette!
Ho un problema con un altro algoritmo simile e non mi sembra il caso di aprire un altro argomento. Dunque chiedo qui:
L'esercizio chiede di calcolare le occorrenze in una stringa. Il programma funziona bene tranne che per che il caso di "spazio_e_spazio" cioè se volessi calcolare l'occorrenza della congiunzione e, lo stesso per la congiunzione "o", dunque "spazio_o_spazio" Posto il mio codice:
#include <stdio.h>
#include <string.h>
#define MAX 1000
int occorrenze(char testo1[], char testo2[]) { // Calcola il numero di occorrenze in una stringa
int dimTesto2 = strlen(testo2);
int dimTesto1 = strlen(testo1);
int i = 0;
int j = 0;
int t = i;
int contatoreLettera = 0;
int trovato = 0;
for(i = 0; i < dimTesto1; ++i) {
if(testo1[t] == testo2[j]) {
if(t == (dimTesto1 - 1) && (testo1[t] == testo2[j])) {
++trovato;
}
++contatoreLettera;
++t;
++j;
while((j < dimTesto2) || (contatoreLettera == j)) {
if(testo1[t] == testo2[j]) {
++contatoreLettera;
++t;
}
if(contatoreLettera == dimTesto2) {
contatoreLettera = 0;
++trovato;
}
++j;
}
j = 0;
} else {
++t;
contatoreLettera = 0;
}
}
return trovato;
}
int main(void) { // verificare quante volte dico "tua madre e' una puttana" perche'...il perchè lo scrivo
char testo[MAX];
char occorrenza[MAX];
int trovati = 0;
int riprova = 0;
printf("Questo e' un esercizio dove e' richiesto all'utente di inserire un testo di massimo %d ", MAX);
printf("caratteri ed un altro testo o lettere delle quali verificarne l'occorrenza.\n\n");
printf("Inserire un testo (max %d caratteri):\n", MAX);
scanf(" %[^\n]", testo);
puts("");
while(riprova == 0) {
printf("Inserire occorrenza da verificare(max %d caratteri):\n", MAX);
scanf(" %[^\n]", occorrenza);
trovati = occorrenze(testo, occorrenza);
printf("\nSono state trovate %d occorrenze", trovati);
puts("\n");
printf("Vuoi provare con un'altra occorrenza? 0 per riprovare e -1 per terminare: ");
scanf("%d", &riprova);
puts("");
}
}
L'output è questo: (nel primo caso è "o" e sono correttamente 9 occorrenze; nel secondo caso è "spazio_o_spazio" ed anzi che essere 2 occorrenze ne segna 5 come se fosse "o_spazio".
Questo e' un esercizio dove e' richiesto all'utente di inserire un testo di massimo 1000 caratteri ed un altro testo o lettere delle quali verificarne l'occorrenza.
Inserire un testo (max 1000 caratteri):
Essere o non essere è questo il problema oppure è un altro o un altro ancora
Inserire occorrenza da verificare(max 1000 caratteri):
o
Sono state trovate 9 occorrenze
Vuoi provare con un'altra occorrenza? 0 per riprovare e -1 per terminare: 0
Inserire occorrenza da verificare(max 1000 caratteri):
o
Sono state trovate 5 occorrenze
Vuoi provare con un'altra occorrenza? 0 per riprovare e -1 per terminare: -1
Time elapsed: 000:12:422
Press any key to continue