Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    213

    [c] Sostituire alcuni caratteri in una stringa

    Ciao ragazzi, sto effettuando un esercizio con la seguente traccia:

    scrivere una function C che sostituisca in un testo tutte le occorrenze di una data sottostringa s1 con una sottostringa s2
    (le due sottostringhe possono avere anche lunghezze diverse) con il minimo numero di spostamenti del blocco di memoria.

    Sono riuscito a fare la parte che s1 = s2 e che s1 > s2, ma non riesco a fare quando s2 > s1...
    Qualcuno sa aiutarmi?

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    void sostituireoccorrenza_statica();
    
    #define MAX_TEXT 250
    #define MAX_PAT 10
    #define MAX_OCCORRENZE 20
    
    int main()
    {
        short int azione;
        printf("Programmazione II - Esercizio 27\n\n");
        do
        {
            printf("1 - Elimina occorrenze con allocazione statica\n");
            printf("2 - Elimina occorrenze con allocazione dinamica\n");
            printf("Inserisci = ");
            scanf("%hd", &azione);
        } while (azione != 1 && azione != 2);
    
        if(azione == 1)
        {
            sostituireoccorrenza_statica();
        } else
        {
            //eliminaoccorrenza_dinamica();
        }
        return 0;
    }
    void sostituireoccorrenza_statica()
    {
        char *testo;
        char pattern[MAX_PAT];
        char sub[MAX_PAT];
        char *ch;
        int i=0, j=0, k=0, l;
        int occorrenze[MAX_OCCORRENZE], num_byte;
        int lunghezza_testo, lunghezza_pattern, lunghezza_sub;
    
        testo = (char *)malloc(200+1);
        fflush(stdin);
        printf("\nInserisci il testo (max %d caratteri)\n", MAX_TEXT-50);
        gets(testo);
    
        printf("\nInserisci il pattern da trovare nel testo (max %d caratteri)\n", MAX_PAT);
        gets(pattern);
    
        printf("\nInserisci la stringa da sostituire al pattern (max %d caratteri)\n", MAX_PAT);
        gets(sub);
    
        lunghezza_testo = strlen(testo);
        lunghezza_pattern = strlen(pattern);
        lunghezza_sub = strlen(sub);
    
        do
        {
            ch = strstr(&testo[i], pattern);
            if(ch != 0)
            {
                occorrenze[j] = (int)(ch - &testo[0]);
                j++;
                i = (int)(ch - &testo[0] + lunghezza_pattern);
            }
        } while (i < lunghezza_testo && ch != 0);
    
        if(lunghezza_pattern == lunghezza_sub)
        {
            for(i=j-1;i>=0;i--)
            {
                l=0;
                k = occorrenze[i];
                while(l < lunghezza_sub)
                {
                    testo[k] = sub[l];
                    k++;
                    l++;
                }
            }
        } else if (lunghezza_pattern > lunghezza_sub)
        {
            for(i=j-1;i>=0;i--)
            {
                l=0;
                k = occorrenze[i];
                while(l < lunghezza_sub)
                {
                    testo[k] = sub[l];
                    k++;
                    l++;
                }
                num_byte = lunghezza_testo - (int)(&testo[occorrenze[i]+lunghezza_sub]-&testo[0]);
                memmove(&testo[occorrenze[i]+lunghezza_sub], &testo[occorrenze[i]+lunghezza_pattern], num_byte);
            }
        } else
        {
            testo = (char *)realloc(testo, lunghezza_testo+(j*(lunghezza_sub-lunghezza_pattern)));
            for(i=j-1;i>=0;i--)
            {
                num_byte = lunghezza_testo - (int)(&testo[occorrenze[i]+lunghezza_sub]-&testo[0]);
                memmove(&testo[occorrenze[i]+lunghezza_sub+(lunghezza_sub-lunghezza_pattern)], &testo[occorrenze[i]+lunghezza_pattern+1], num_byte);
                l = 0;
                k = occorrenze[i];
                while(l < lunghezza_sub)
                {
                    testo[k] = sub[l];
                    k++;
                    l++;
                }
            }
        }
    
        puts(testo);
    }
    Ringrazio chi mi aiuta

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    213
    Nessuno?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.