Comparsa di caratteri non voluti

di il
33 risposte

33 Risposte - Pagina 3

  • Re: Comparsa di caratteri non voluti

    oregon ha scritto:


    K&R

    e dai ... almeno le iniziali corrette!
  • Re: Comparsa di caratteri non voluti

    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
  • Re: Comparsa di caratteri non voluti

    
    int occorrenze(char testo1[], char testo2[]) { 
    	int dimTesto2 = strlen(testo2);
    	int dimTesto1 = strlen(testo1);
    	int i, j;
    	int trovato = 0;
            for (i = 0; i <= dimTesto1 - dimTesto2; i++) {  
              for (j = 0; j < dimTesto2; j++) 
                if (testo1[i+j] != testo2[j]) 
                    break; 
              if (j == dimTesto2)
                   trovato++;
             } 
             return trovato; 
    }
    
    Stai attento a come acquisisci il pattern: whitespace è un carattere speciale per scanf. Prova prima con il pattern " o " inserito a mano dentro il codice
  • Re: Comparsa di caratteri non voluti

    Weierstrass ha scritto:


    
    int occorrenze(char testo1[], char testo2[]) { 
    	int dimTesto2 = strlen(testo2);
    	int dimTesto1 = strlen(testo1);
    	int i, j;
    	int trovato = 0;
            for (i = 0; i <= dimTesto1 - dimTesto2; i++) {  
              for (j = 0; j < dimTesto2; j++) 
                if (testo1[i+j] != testo2[j]) 
                    break; 
              if (j == dimTesto2)
                   trovato++;
             } 
             return trovato; 
    }
    
    Stai attento a come acquisisci il pattern: whitespace è un carattere speciale per scanf. Prova prima con il pattern " o " inserito a mano dentro il codice
    ok e grazie
Devi accedere o registrarti per scrivere nel forum
33 risposte