Questo è un programma che devo mandare entro la mezzanotte di stasera al prof per sostenere l'orale di informatica.. inizialmente il programma faceva tutto da tastiera. non c'era il problema dell'overflow perche' la conversione la vaceva usando un ciclo quindi 1 parola per volta:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char * Replace(char *origin, char *old, char *new)
{
char *ris = (char*)malloc(sizeof(char)*strlen(origin));
char *tmp = (char*)malloc(sizeof(char)*strlen(origin));
ris = strcpy(ris, origin);
char *pos;
while((pos = strstr(ris, old)) != NULL) {
memset(tmp, 0, strlen(tmp));
tmp = strncpy(tmp,ris, pos - ris);
tmp = strcat(tmp, new);
tmp = strcat(tmp, pos + strlen(old));
ris = strcpy(ris, tmp);
}
ris = (char*)realloc(ris, sizeof(char)*strlen(ris));
free(tmp);
free(origin);
return ris;
}
int main(int argc, char ** argv) {
char str[1000];
printf("\nIl programma comincia qui. Per uscire premere ctrl + c\n \n");
printf("Inserire il testo da convertire (massimo 510 caratteri) e premere invio:\n");
do{
scanf("%s", str);
char *mystring = (char*)malloc(sizeof(char) * strlen(str));
mystring = strcpy(mystring,str);
char *ris = Replace(mystring, "ch", "k");
ris = Replace(ris, "per", "x");
ris = Replace(ris, "come", "cm");
ris = Replace(ris, "questo", "qst");
ris = Replace(ris, "niente", "nnt");
ris = Replace(ris, "non", "nn");
ris = Replace(ris, "oggi", "gg");
ris = Replace(ris, "uno", "1");
ris = Replace(ris, "sono", "sn");
ris = Replace(ris, "tutto", "tt");
ris = Replace(ris, "tutta", "tt");
ris = Replace(ris, "cosa", "cs");
ris = Replace(ris, "una", "1");
ris = Replace(ris, "comunque", "cmq");
ris = Replace(ris, "bene", "bn");
ris = Replace(ris, "sei", "6");
ris = Replace(ris, "destra", "dx");
ris = Replace(ris, "sinistra", "sx");
ris = Replace(ris, "messaggio", "msg");
ris = Replace(ris, "numero", "num");
ris = Replace(ris, "dopo", "dp");
ris = Replace(ris, "rispondi", "risp");
ris = Replace(ris, "risponde", "risp");
ris = Replace(ris, "più", "+");
printf("%s", ris);
printf(" ");
}while(str != "\n");
return 0;
}
il prof però ha detto che non va bene in questo modo perche devo lavorare da file, devo prendere in imput il testo da tastiera, salvarlo nel file e poi riprenderlo in imput da file e convertirlo.. le conversioni salvate anch'esse in un file (questo l'ho fatto copiando la parte delle conversioni in un file nominato itr.h che poi ho ripreso in imput dentro il main con #include "itr.h") ....
questo spiega le dichiarazioni nel main e il file .txt
per il resto, noi abbiamo studiato solo lo stack (l'heap ci è solo stato accennato).. per i buffer invece, pensavo di usarne solo uno, imput e output... ma li stò ripassando un pò ora, non ho molto chiaro il modo d'uso.. la teoria la sò, non è quello... ma ho fatto poca prattica, molti comandi ci sono stati mostrati da soli quindi devo vedere un pò come si comportano nel programma nei vari casi.