Esercizio-Porgramma

Aperto da Gesux, 14 Maggio 2007, 11:50:51

Discussione precedente - Discussione successiva

0 Utenti e 1 Visitatore stanno visualizzando questa discussione.

Gesux

Ciao Ragazzi devo fare un programma per il corso di algoritmi ma non da dove iniziare mi date una mano?
La traccia è questa:
Scrivere un programma ANSI C che acquisisce un file di testo e due stringhe e poi costruisce un nuovo file di testo ottenuto dal file di testo precedente sostituendo ogni occorrenza della prima stringa con la seconda stringa.
Ti prego aitatemi è urgente

benna

Io procederei così:
Definisci due variabili tipo FILE e due vettori di caratteri; apri il file di origine con la funzione fopen e leggilo parola per parola con la funziona fscanf; per ogni parola letta confrontala mediante la funzione strcmp con la prima stringa (letta da tastiera con la funzione scanf); se coincidono scrivi sul file di destinazione la seconda stringa, altrimenti la stringa che hai letto dal primo file


Gesux

Io ho iniziato a fare così:
#include
#include

char replace_str(FILE, char *, char *);

int main(void)
{
  FILE *pfile1;
  FILE *pfile2;
  char stringa1[1000];
  char stringa2[1000];
  char contenitore[4096];
  pfile1 = fopen ( "file1.txt" , "r" );
  pfile2 = fopen ( "file2.txt" , "w" );

  printf("\nInserire la stringa da cercare: " ;);
  scanf("%s", stringa1);

  printf("\nInserire la stringa da sostituire: " ;);
  scanf("%s", stringa2);
  contenitore = pfile1;

  /*chiamo la funzione per la sostituzione*/
  replace_str(pfile1, stringa1, stringa2);
  /*scrive il contenuto della variabile contenitore nel file2*/
  fwrite (contenitore , sizeof(contenitore[0]) , sizeof(contenitore) , pfile2 );
   
  fclose (pfile1);
  fclose (pfile2);
  return 0;
}


char replace_str(FILE pfile1, char stringa1, char stringa2)
{
  static char contenitore[4096];
  char *p;

  if(!(p = strstr(pfile1, stringa1)))  
    return pfile1;

  strncpy(contenitore, pfile1, p-pfile1);  
  contenitore[p-pfile1] = '\0';

  fprintf(contenitore+(p-pfile1), "%s%s", stringa2, p+strlen(pfile1));

  return contenitore;
}
Però non mi funziona.

marcoff

almeno è a compilazione zero?

.... when i am good, i am good..... when i am bad, i am better...

Gesux

In che senso a comilazione zero?

Gesux

Scusami in che senso a compilazione zero?

benna

Hai commesso un po di errori:
Non puoi porre contenitore = pfile1 (tra l'altro non ne ho capito l'utiltà) perchè contenitore è un vettore di char, mentre pfile1 è un puntatore a file;
replace_str(pfile1, stringa1, stringa2) ritorna un valore char che ti sei dimenticato di salvare da qualche parte;
la funzione strncpy() non esiste, forse volevi scrivere strcpy();

P.S.
Se vuoi modificare un tuo messaggio c'è il tasto edit ;)



Questo messaggio è stato aggiornato da benna il 15/05/2007  alle ore  17:51:58

marcoff

a compilazione zer0 significa con zero errori, ma in senso ironico perchè dal codice sono evidenti molti errori :D,
e benna ha confermato ;).
Poi una domanda, sono cieco o non vedo la get dal file?:eek:



Questo messaggio è stato aggiornato da marcoff il 15/05/2007  alle ore  18:59:48
.... when i am good, i am good..... when i am bad, i am better...

Gesux

Ciao grazie per la risposta però ti chiedo se per piacere me lo puoi compilarlo fino ad eseguirlo.
Ciao

marcoff

Allora Gesux piuttosto che compilarlo ed eseguirlo, avrei preferito discuterne insieme a te, secondo la mia opinione sarebbe bene capire le cose che si fanno piuttosto che averle belle e fatte.
Comunque in ogni caso ti aiuto lo stesso ;), anche se ti premetto che è inutile compilare questo listato, perchè è sbagliato proprio nella logica.
In ogni caso fammmi una cortesia, siccome sono dell'idea che questo codice da te postato non sia opera tua, potresti postare sul forum da cui lo hai preso e dire a chi lo ha fatto d leggersi un bel pò di manuali? Grazie.:D :duo
Tornando a te, ora ti aiuto io.;)



Questo messaggio è stato aggiornato da marcoff il 16/05/2007  alle ore  13:36:03
.... when i am good, i am good..... when i am bad, i am better...