|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Nov 2001
Città: Torino
Messaggi: 3092
|
[C] Programma cerca e cancella!!
Ho fatto un programma in c che chiede una stringa, poi la sottostringa da cercare in esso e poi un'altra sottostringa che sostituisce quella di prima..
Ora però devo fare un programma che.. presa una stringa ad esempio "camino" e poi una sottostringa, ad esempio "ami", me la cancelli.. dando come risultato "cno".. come si modifica il codice? #include <stdio.h> #define L1 10 #define L2 10 #define SORG 30 #define VECCHIA 10 #define NUOVA 10 #define DEST 30 typedef enum{FALSO,VERO} bool; char* sottostringa(char* p, char* s); bool SostPrimaOcc(char* vecchia, char* nuova, char* sorg, char* dest); int main() { char* ris; char vecchia[VECCHIA], nuova[NUOVA], sorg[SORG], dest[DEST]; char stringa[L1], pattern[L2]; bool ris1; int scelta = -1; while (scelta != 0) { printf("1) sottostringa\n2) SostPrimaOcc\n0) Esci\n\nScelta: "); scanf("%d",&scelta); switch(scelta) { case 1: printf("Inserisci la stringa in cui cercare (max 10 caratteri): "); scanf("%s",stringa); printf("Inserisci la sottostringa da cercare (max 10 caratteri): "); scanf("%s",pattern); ris = sottostringa(pattern, stringa); if (ris == NULL) { printf("Non ho trovato %s in %s\n\n", pattern, stringa); } else { printf("Ho trovato %s in %s\n\n", pattern, stringa); } break; case 2: printf("Inserisci la stringa in cui cercare (max 30 caratteri): "); scanf("%s",sorg); printf("Inserisci la sottostringa da cercare (max 10 caratteri): "); scanf("%s",vecchia); printf("Inserisci la sottostringa da sostituire (max 10 caratteri): "); scanf("%s",nuova); ris1 = SostPrimaOcc (vecchia, nuova, sorg, dest); if (ris1 == FALSO) { printf("Non ho trovato %s in %s. La stringa e' rimasta: %s\n\n", vecchia, sorg, dest); } else { printf("Ho trovato %s in %s. La nuova stringa e': %s\n\n", vecchia, sorg, dest); } break; case 0: break; default : printf("Scelta non valida!\n\n"); break; } } getch(); } char* sottostringa (char* p, char* s) { char* i = p; char* j = s; int ris=0; int cont=0; char* found=NULL; char* k = p; while (*k != '\0') { cont++; k++; } while (*j != '\0') { while (*i != '\0') { if (*i == *(j+ris)) { ris++; if (found == NULL) found = j; } else break; i++; } if (ris == cont) { return found; } else { ris = 0; found = NULL; i = p; } j++; } return NULL; } bool SostPrimaOcc (char* vecchia, char* nuova, char* sorg, char* dest) { char* ris=sottostringa(vecchia,sorg); int j; char* i = sorg; if (ris != NULL) { int cont=0; char* k = vecchia; while (*k != '\0') { cont++; k++; } k = nuova; int cont1=0; while (*k != '\0') { cont1++; k++; } k = dest; while (i != ris) { *k = *i; k++; i++; } for (j = 0; j < cont1; j++) { *k = *nuova; k++; nuova++; } i += cont; while (*i != '\0') { *k = *i; k++; i++; } *k='\0'; return VERO; } else { char* dest1 = dest; while (*i != '\0') { *dest1 = *i; i++; dest1++; } *dest1='\0'; } return FALSO; } Help vi prego.. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8895
|
se non indenti io non mi metto a guardare il codice
~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Nov 2001
Città: Torino
Messaggi: 3092
|
ho fatto copia e incolla dal dev c++.. ma come mai non lo indenta?
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Nov 2001
Città: Torino
Messaggi: 3092
|
quando scrivo il messaggio me lo vede come indentato.. come mai qui no?
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Mar 2005
Messaggi: 1653
|
Quote:
Codice:
int main()
{
if (metti_i_tag)
indenta=1;
else
indenta=0;
return 0;
}
Ciao
__________________
gica78r@ncc-1701:~$ tar -c tar: Codardamente mi rifiuto di creare un archivio vuoto |
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Nov 2001
Città: Torino
Messaggi: 3092
|
Codice:
#include <stdio.h>
#define L1 10
#define L2 10
#define SORG 30
#define VECCHIA 10
#define NUOVA 10
#define DEST 30
typedef enum{FALSO,VERO} bool;
char* sottostringa(char* p, char* s);
bool SostPrimaOcc(char* vecchia, char* nuova, char* sorg, char* dest);
int main()
{
char* ris;
char vecchia[VECCHIA], nuova[NUOVA], sorg[SORG], dest[DEST];
char stringa[L1], pattern[L2];
bool ris1;
int scelta = -1;
while (scelta != 0)
{
printf("1) sottostringa\n2) SostPrimaOcc\n0) Esci\n\nScelta: ");
scanf("%d",&scelta);
switch(scelta)
{
case 1: printf("Inserisci la stringa in cui cercare (max 10 caratteri): ");
scanf("%s",stringa);
printf("Inserisci la sottostringa da cercare (max 10 caratteri): ");
scanf("%s",pattern);
ris = sottostringa(pattern, stringa);
if (ris == NULL)
{
printf("Non ho trovato %s in %s\n\n", pattern, stringa);
}
else
{
printf("Ho trovato %s in %s\n\n", pattern, stringa);
}
break;
case 2: printf("Inserisci la stringa in cui cercare (max 30 caratteri): ");
scanf("%s",sorg);
printf("Inserisci la sottostringa da cercare (max 10 caratteri): ");
scanf("%s",vecchia);
printf("Inserisci la sottostringa da sostituire (max 10 caratteri): ");
scanf("%s",nuova);
ris1 = SostPrimaOcc (vecchia, nuova, sorg, dest);
if (ris1 == FALSO)
{
printf("Non ho trovato %s in %s. La stringa e' rimasta: %s\n\n", vecchia, sorg, dest);
}
else
{
printf("Ho trovato %s in %s. La nuova stringa e': %s\n\n", vecchia, sorg, dest);
}
break;
case 0: break;
default : printf("Scelta non valida!\n\n");
break;
}
}
getch();
}
char* sottostringa (char* p, char* s)
{
char* i = p;
char* j = s;
int ris=0;
int cont=0;
char* found=NULL;
char* k = p;
while (*k != '\0')
{
cont++;
k++;
}
while (*j != '\0')
{
while (*i != '\0')
{
if (*i == *(j+ris))
{
ris++;
if (found == NULL)
found = j;
}
else
break;
i++;
}
if (ris == cont)
{
return found;
}
else
{
ris = 0;
found = NULL;
i = p;
}
j++;
}
return NULL;
}
bool SostPrimaOcc (char* vecchia, char* nuova, char* sorg, char* dest)
{
char* ris=sottostringa(vecchia,sorg);
int j;
char* i = sorg;
if (ris != NULL)
{
int cont=0;
char* k = vecchia;
while (*k != '\0')
{
cont++;
k++;
}
k = nuova;
int cont1=0;
while (*k != '\0')
{
cont1++;
k++;
}
k = dest;
while (i != ris)
{
*k = *i;
k++;
i++;
}
for (j = 0; j < cont1; j++)
{
*k = *nuova;
k++;
nuova++;
}
i += cont;
while (*i != '\0')
{
*k = *i;
k++;
i++;
}
*k='\0';
return VERO;
}
else
{
char* dest1 = dest;
while (*i != '\0')
{
*dest1 = *i;
i++;
dest1++;
}
*dest1='\0';
}
return FALSO;
}
|
|
|
|
|
|
#7 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
che casino ragazzo mio, che casino... bastavano 35 righe di codice:
Codice:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main() {
char s1[0x400], s2[0x400];
int l1, l2;
char done = 0;
int i, max;
printf("stringa principale: ");
gets(s1);
printf("sottostringa da eliminare: ");
gets(s2);
l1 = strlen(s1);
l2 = strlen(s2);
max = l1 - l2 + 1;
for (i = 0; i < max; i++) {
if (!strncmp(s1 + i, s2, l2)) {
int j;
for (j = i; j < max; j++) {
s1[j] = s1[j + l2];
}
done = 1;
break;
}
}
if (done) {
printf("stringa risultante: %s\n", s1);
}
else {
printf("sottostringa non trovata\n");
}
system("pause");
return 0;
}
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Nov 2001
Città: Torino
Messaggi: 3092
|
dammi una mano allora..
|
|
|
|
|
|
#9 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
il programma è quello, sta là ed è scritto in C standard
quel programma prende in input due stringhe, cerca la seconda nella prima e se la trova la rimuove, è quello che volevi sono solo 35 righe di codice, quindi non ci vuole molto a leggerle e capirle |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Nov 2001
Città: Torino
Messaggi: 3092
|
Il bello è che devo farlo con i puntatori..
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:51.



















