Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Sostituire una parola in C

    Ciao a tutti,
    anche oggi ho un nuovo problema
    Dovrei trovare ed sostituire una determinata parola in un testo...

    esempio :

    testo="Mi piace correre";
    vecchia="correre";
    nuova="camminare";

    Una volta eseguita la funzione dovrei avere "Mi piace camminare", come posso fare ???

    Esiste una funzione già predisposta a questo tipo di problema ??

    Grazie a tutti

  2. #2
    Utente di HTML.it L'avatar di Grunt
    Registrato dal
    Dec 2001
    Messaggi
    246
    codice:
    // SOSTITUZIONE DI UNA STRINGA
    // Ricopio A su B, rimpiazzando ogni stringa S1 che trovo con S2
    
    char *replace(char *A, char *s1, char *s2, char *B)
     {int i,j,k,L;
      i=0;j=0;L=len(s1);
    
      while (A[i]!='\0')
      {if (match(s1,A,i)==1)
    
       {k=0;                //Copio s2 su B ...
        while (s2[k]!='\0')
        {B[j]=s2[k];++j;++k;};
        i = i + L;}         //... e mi sposto in A subito dopo s1
    
       else                 //Altrimenti, copio un altro carattere di A su B
       {B[j]=A[i];++i;++j;}
      }
    
      B[j] = '\0';          //Alla fine:
      return(B);}           //inserisco il carattere '\0' di fine stringa

  3. #3
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    
    
    
    
    char *replace(char *s, char *pattern, char *substitution)
    {
        char *u;
        int i=0, n=0, j=0, x, sw=0, len, len_p, len_s, l;
    
        u = (char*)malloc(100*sizeof(char));
    
        len=strlen(s);        
        len_p=strlen(pattern);
        len_s=strlen(substitution)-1;
        l = len - len_p + len_s + 1;
                   
        for(i; s[i]!='\0'; i++)
        {
            while(pattern[j]!='\0')
            {
                if((j==0 && s[i-1]!=' ') && (j==0 && s[i-1]!='\0'))
                {
                    break;
                }
                else if((pattern[j+1]=='\0' && s[i+1]!=' ') && (pattern[j+1]=='\0' && s[i+1]!='\0'))
                {
                    i=i-j;
                    for(x=0; x<j; x++,i++) 
                        u[i]=pattern[x];
                    j=0;
                    sw=0;
                    break;
                }
                else if(pattern[j]==s[i])
                {
                    u[n]=substitution[j];
                    i++;
                    j++;
                    n++;
                    sw=1;
                }
                else
                {
                    i=i-j;
                    for(x=0; x<j; x++,i++) 
                        u[i]=pattern[x];
                    j=0;
                    sw=0;
                    break;
                }
            }
                         
            if(sw==1)
            {
                sw=2;
                while(len_p <= len_s)
                {
                    u[n]=substitution[len_p];
                    n++;
                    len_p++;
                }
            }
           
            u[n]=s[i];
            n++;
        }
            
        if(sw==2)
        {
            for(i=0; i<l; i++)
                ;
            u[i]='\0';
            printf("PATTERN trovato: ");
        }    
        else
            printf("PATTERN non trovato: ");        
        
        return u;
    }
    
    
    
    
    
    int main()
    {
        char s[]="mi piace correre", pattern[30], substitution[30];
        
        printf("mi piace correre\n\n");
        
        printf("Sostituisci: ");
        scanf("%s", pattern);
        printf("Con: ");
        scanf("%s", substitution);
        
        printf("%s\n", replace(s, pattern, substitution));
       
        system("PAUSE");
        return 0;
    }
    N.B.
    funziona soltanto con pattern assoluti:
    "PIACE" == "PIACE", (non trova ne "PIA" ne "CE")
    in più permette di inserire stringhe di "qualsiasi" dimensione.
    ...Terrible warlords, good warlords, and an english song

  4. #4
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    
    char *replace(char *str, char *pattern, char *substr)
    {
        char split[100][100];
        int i, j=0, z=0;
                                                        
        for(i=0; str[i]!='\0'; i++)
        {
            if(str[i]==' ')
            {
                split[j][z]='\0';
                j++;
                z=0;
            }
            else
            {
                split[j][z]=str[i];
                z++;
            }
        }
        split[j][z]='\0';
        z=0;
        
        for(i=0; i<=j; i++)
        {
            if(!strcmp(split[i], pattern))
            {
                while(substr[z]!='\0')
                {
                    split[i][z]=substr[z];
                    z++; 
                }
                split[i][z]='\0';
                z=0;    
            }
        }
                
        for(i=0; i<=j; i++)
        {
            strcat(split[0], " ");
            strcat(split[0], split[i+1]);
        }
        
        strcat(split[0], "\0");        
                    
        return split[0];    
    }
    
    
    
    
    
    int main()
    {
        int len;
        char str[100], pattern[30], substr[30];
        printf("Inserisci una frase [MAX.100]: ");
        fgets(str, 100, stdin);
        printf("Sostituisci: ");
        scanf("%s", pattern);
        printf("Con: ");
        scanf("%s", substr);
        len=strlen(str);
        str[--len]='\0';
        printf("%s\n", replace(str, pattern, substr));
        system("PAUSE");
        return 0;
    }
    N.B. sostituisce N pattern in una sola volta.
    ...Terrible warlords, good warlords, and an english song

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 © 2025 vBulletin Solutions, Inc. All rights reserved.