PDA

View Full Version : PROBLEMA 4 FUNZIONI


LOVE85
08-08-2007, 02:38
Ciao tranquillo auron ho provato a fare così e per conto mio dato che io e la ragazza abbiamo litigato perchè non gli sta bene il do-while......

Il mio codice di partenza era questo ed è funzionante:

#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>

char *subst_string (char *, char *, char *);
void pulisci_e_printa(void);
void reverse(char s[]);

int main()
{
char stringa1[50],cercare[10],sostituire[10],newstringa[100],*niente[1],opzioni,aggiunta[10];
int risposta;
printf("-------------PROVA INUTILE PERDITEMPO ------------\n\n1 - SOSTITUISCI\n2 - TOGLI\n3 - AGGIUNGI\n4 - INVERTI\n\n> ");
opzioni = getch();
switch (tolower(opzioni))
{
case '1':
{
pulisci_e_printa();
gets(stringa1);
printf("Inserisci la parola da cercare e......:\n\n");
scanf("%s",cercare);
printf(".....sostituire con:\n\n");
scanf("%s",sostituire);
printf("La nuova frase e': %s\n\n",subst_string(stringa1,cercare,sostituire));
system("pause");
break;
}
case '2':
{
pulisci_e_printa();
*niente = "";
gets(stringa1);
printf("Inserisci la parola da eliminare:\n\n");
scanf("%s",cercare);
printf("La nuova frase e': %s\n\n",subst_string(stringa1,cercare,*niente));
system("pause");
break;
}
case '3':
{
pulisci_e_printa();
fgets(stringa1, sizeof(stringa1), stdin);
stringa1[strlen(stringa1)-1] = '\0';
printf("\n\nInserisci parola da aggiungere:\n\n");
fgets(aggiunta, sizeof(aggiunta), stdin);
aggiunta[strlen(aggiunta)-1] = '\0';
strcpy(newstringa, stringa1);
strcat(newstringa, " ");
strcat(newstringa, aggiunta);
printf("\n\nLa nuova frase: %s\n\n", newstringa);
system("pause");
break;
}
case '4':
{
pulisci_e_printa();
gets(stringa1);
reverse(stringa1);
printf("\n\nLa nuova frase: %s\n\n", stringa1);
system("pause");
break;
}
default:
{
printf("SEI IDIOTA DIGITA UNO DEI CASI PRESENTI!!!\n\n\n");
break;
}
}
return 0;
}


char *subst_string (char *str, char *search, char *subst)
{
size_t len_search, len_subst, len_r, len_s;
size_t size = 0, capacity = 0, expand = 256;
char *start = str, *p, *output = NULL, *output_new;

len_search = strlen (search);
len_subst = strlen (subst);

do {
p = strstr (start, search);

if (p != NULL)
{
len_r = p - start;
len_s = len_subst;
}
else
{
len_r = strlen (start);
len_s = 0;
}

if ((size + len_r + len_s + 1) > capacity)
{
capacity = size + len_r + len_s + 1 + expand;
output_new = (char*) realloc (output, capacity);

if (output_new == NULL)
{
free (output);
return NULL;
}

output = output_new;
}

strncpy (&output[size], start, len_r);
size += len_r;
strncpy (&output[size], subst, len_s);
size += len_s;

start += len_r + len_search;
} while (p != NULL);

output[size] = '\0';

output_new = (char*) realloc (output, size+1);

if (output_new != NULL)
output = output_new;

return output;
}
void pulisci_e_printa(void)
{
system("cls");
printf("Inserisci la stringa da modificare:\n\n");
}

void reverse(char s[])
{
int c, i, j;

for (i=0, j=strlen(s)-1; i < j;i++, j--)
{
c = s[i];
s[i] = s [j];
s[j] = c;
}
}



ora che ho esportato le funzioni e integrato la funzione do per fare mille modifiche alla frase originale fino a che non decido di uscire tramite lo 0 e 1. Potreste aiutarmi a correggere l'errore e come faccio a restituire il risultato elaborato in stringa1 per una nuova operazione da scegliere tra le 4 funzioni

Mi spiego:

Scrivo frase: Oggi è una bella giornata

Voglio sostituire: bella con brutta

Nuova frase: Oggi è una brutta giornata

Non voglio uscire

ECCO QUI vedo: Oggi è una bella giornata
e non Oggi è una brutta giornata
e così se era rimasto....

Voglio aggiungere (tra l'altro non funziona nel caso do while o funzion esterne da vedere perchè).

e così via fino alla fine o meglio alla scelta dell'utente tra l'uscita e non. Ok? Grazie cordiali saluti

// Questa quella "errata" ////



#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>

char *subst_string (char *, char *, char *);
char *sostituiscoparola(char *);
char *tolgoparola(char *);
char *aggiungoparola(char *stringaloc3);
char *invertofrase(char *stringaloc4);

void pulisci_e_printa(void);
void reverse(char s[]);

int main()
{
char stringa1[50],opzioni;
int comando,exit;
pulisci_e_printa();
gets(stringa1);
do{
printf("La frase e': %s\n\n1 - SOSTITUI'\n2 - TOGLIE'\n3 - AGGIUNGE'\n4 - ROVESCIA'\n\n> ",stringa1);
opzioni = getch();
switch (tolower(opzioni))
{
case '1':
sostituiscoparola(stringa1);
break;
case '2':
tolgoparola(stringa1);
break;
case '3':
aggiungoparola(stringa1);
break;
case '4':
invertofrase(stringa1);
break;
default:
printf("SEI IDIOTA DIGITA UNO DEI CASI PRESENTI!!!\n\n\n");
system("pause");
break;
}
printf("\n\nVuoi uscire?\n\nPremi 1 se USCIRE\n\nPremi 0 se CONTINUARE AD USARE IL PROGRAMMA\n\n");
scanf("%d",&comando);
if (comando == 1){
exit = 1;
printf("STO USCENDO DAL PROGRAMMA!\n\nGrazie per aver partecipato allo stupido programma inutile di una feccia");
sleep(2000);
}
else
exit = 0;
}while(exit == 0);
return 0;
}

char *sostituiscoparola(char *stringaloc1)
{
char cercare[10],sostituire[10];
printf("Inserisci la parola da cercare e......:\n\n");
scanf("%s",cercare);
printf(".....sostituire con:\n\n");
scanf("%s",sostituire);
printf("La nuova frase e': %s\n\n",subst_string(stringaloc1,cercare,sostituire));
system("pause");
}
char *tolgoparola(char *stringaloc2)
{
char cercare[10],*niente[1];
*niente = "";
printf("Inserisci la parola da eliminare:\n\n");
scanf("%s",cercare);
printf("La nuova frase e': %s\n\n",subst_string(stringaloc2,cercare,*niente));
system("pause");
}
char *aggiungoparola(char *stringaloc3)
{
char newstringa[100],aggiunta[10];
fgets(stringaloc3, sizeof(stringaloc3), stdin);
stringaloc3[strlen(stringaloc3)-1] = '\0';
printf("\n\nInserisci parola da aggiungere:\n\n");
fgets(aggiunta, sizeof(aggiunta), stdin);
aggiunta[strlen(aggiunta)-1] = '\0';
strcpy(newstringa, stringaloc3);
strcat(newstringa, " ");
strcat(newstringa, aggiunta);
printf("\n\nLa nuova frase: %s\n\n", newstringa);
system("pause");
}
char *invertofrase(char *stringaloc4)
{
reverse(stringaloc4);
printf("\n\nLa nuova frase: %s\n\n",stringaloc4);
system("pause");
}
char *subst_string (char *str, char *search, char *subst)
{
size_t len_search, len_subst, len_r, len_s;
size_t size = 0, capacity = 0, expand = 256;
char *start = str, *p, *output = NULL, *output_new;

len_search = strlen (search);
len_subst = strlen (subst);

do {
p = strstr (start, search);

if (p != NULL)
{
len_r = p - start;
len_s = len_subst;
}
else
{
len_r = strlen (start);
len_s = 0;
}

if ((size + len_r + len_s + 1) > capacity)
{
capacity = size + len_r + len_s + 1 + expand;
output_new = (char*) realloc (output, capacity);

if (output_new == NULL)
{
free (output);
return NULL;
}

output = output_new;
}

strncpy (&output[size], start, len_r);
size += len_r;
strncpy (&output[size], subst, len_s);
size += len_s;

start += len_r + len_search;
} while (p != NULL);

output[size] = '\0';

output_new = (char*) realloc (output, size+1);

if (output_new != NULL)
output = output_new;

return output;
}
void pulisci_e_printa(void)
{
system("cls");
printf("Inserisci la stringa da modificare:\n\n");
}

void reverse(char s[])
{
int c, i, j;

for (i=0, j=strlen(s)-1; i < j;i++, j--)
{
c = s[i];
s[i] = s [j];
s[j] = c;
}
}
]

il codice è questo però il problema è che se io modifico la prima volta la frase va bene ma