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

    [c]ricerca e sostituzione

    salve,allora dovrei fare questo programma che data una stringa di testo ed una chiave cerca la chiave nel testo e poi la scambia con un'altra parola
    es
    testo ciao mi chiamo vale
    chiave vale
    la chiave trovata 1
    scambio con marta
    nuovo testo marta
    fin'ora ho fatto cosi anche se credo di avere dei problemi con lo scambio ma non riesco a trovare una soluzione:
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>

    main()
    {
    char testo[]="giovanni usci col bel tempo dopo una settimana e ando a comprarsi un bel gelato";
    char chiave[]="settimana";
    char scambio[]="giornata";
    int m=strlen(testo),n=strlen(chiave),i,j=0,size_min,si ze_max;

    printf("---------------------------------\n");
    printf("%s\n",testo);
    printf("---------------------------------\n");
    printf("la chiave e: %s\n",chiave);
    printf("---------------------------------\n");


    for(i=0;i<m;i++){
    if(strncmp(&testo[i],chiave,n)==0){
    size_min=i;
    size_max=i+n;
    printf("size fine: %d\n",i+1);
    printf("size inizio: %d\n",i+n);
    printf("la parola e' composta da %d caratteri\n",size_max-size_min);

    }}

    for(i=size_min;i<size_max;i++){
    testo[i]=scambio[i-size_min];}


    printf("%s",testo);

    }

  2. #2
    Mi sembra che tu non abbia accodato la parte finale della stringa.
    La stringa testo dovrebbe essere abbastanza grande da permettere l'inserimento
    di una sequenza di caratteri più lunga di quella da sostituire.
    Sicuramente, poi, è bene utilizzare una stringa temporanea 'di appoggio'.
    In poche parole io farei così:
    codice:
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #define MAX_STR 400
    int repsubstr( char *testo, char *chiave, char *scambio)
    {
    	int i, s, j, ltesto=strlen(testo), lchiave=strlen(chiave);
    	char risultato[MAX_STR]="";
    
    	for(i=0; i<ltesto; i++)
    	{
    		if( strncmp( &testo[i], chiave, lchiave)==0 )
    		{
    			strncpy( risultato, testo, i);
    			for(s=i, j=0; scambio[j]; )
    				risultato[s++]=scambio[j++];
    			j=i+lchiave;
    			strcpy( &risultato[s], &testo[j]);
    			strcpy( testo, risultato);
    			return i;
    		}
    	}
    	return 0;
    }
    
    int main()
    {
    	char testo[MAX_STR]="Giovanni usci col bel tempo dopo una settimana e ando a comprarsi un gelato";
    	char chiave[]  ="settimana";
    	char scambio[] ="giornata";
    
    	printf("---------------------------------\n");
    	printf("'%s'\n", testo);
    	printf("---------------------------------\n");
    	printf("la chiave e: '%s'\n", chiave);
    	printf("---------------------------------\n");
    	repsubstr( testo, chiave, scambio);
    	printf("'%s'\n", testo);
    	return 0;
    }
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

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.