Lavoarare con le stringhe nella libreria standard

Luca903
Scusate il disturbo ma non riesco a risolve un problema:
Date due stringhe scrivere un programma in grado di sostituire tutti i caratteri della prima stringa che sono presenti nella seconda con il carattere asterisco(*).

Ho provato a suddividere il programma a blocchi...ovvero di risolvero per una stringa...e di sostituire i caratteri che si ripetono con un asterisco:

#include

int main (void) {

char a[]="questa è la prima stringa";

int i;
int k;

for(i=0; a != '\0';i++){

for(k=0; k
if(a==a[k]){

a='*';

}
}
printf("%c",a);

}



return 0;
}

ma quando devo lavorare con due differenti stringhe mi blocco...qualcuno può darmi dei consigli??

Risposte
Umby2
Sei certo che funziona bene questo codice ?
Io noto delle stranezze.

Se ho ben capito se hai la stringa:
FERRARI
vuoi che si trasformi in:
FE**A*I

è cosi' ?

Luca903
Non esattamente...in realtà dovrei analizzare due stringhe di caratteri e fare in modo che i caratteri della prima stringa che sono presenti anche nella seconda vengano stampate con un asterisco.
Io ho provato a vedere come si poteva risolvere qst problema lavorando su una sola stringa...ma su due non so da dove partire

Luca903
Per quanto riguarda il programma l'ho eseguito su eclipse e nn mi da errori di alcun genere...esegue correttamente l'istruzione di sostituzione dei caratteri simili..

Umby2
"Luca90":
Non esattamente...in realtà dovrei analizzare due stringhe di caratteri e fare in modo che i caratteri della prima stringa che sono presenti anche nella seconda vengano stampate con un asterisco.
Io ho provato a vedere come si poteva risolvere qst problema lavorando su una sola stringa...ma su due non so da dove partire


su due stringhe dovrebbe essere addirittura piu semplice...

non posso provare il programma perchè non ho il C, probabilmente mi sfugge qualcosa nel tuo codice, perchè continuo a notare qualcosa di strano...

se attendi, provo a spiegarmi.

Umby2
Caso FERRARI:

quando incontri la prima R (i=3, la k arriva fino a 2 e quindi non succede nulla)

quando incontri la seconda R (i=4, la k arriva a 3, e quindi ti accorgi della duplicazione e asterizzi la iesima (4) R.

abbiamo quindi:
FER*ARI

Continuando cosi, troverai l'altra R e quindi avrai:

FER*A*I

ma la prima R rimarrà non asterizzata.... :roll:

apatriarca
Il metodo più semplice e naive per risolvere il problema è quello di scorrere la prima stringa un carattere per volta e scrivere un asterisco se il carattere corrente viene trovato nella seconda. Si tratta quindi semplicemente di due cicli annidati, il primo che serve per scorrere la prima stringa un carattere per volta, mentre il secondo serve per cercare un carattere nella seconda stringa. Siccome sembra possibile utilizzare la libreria standard ti consiglio di dare un occhiata alla funzione strchr che ti permette di trovare un carattere in una stringa. Un esempio di utilizzo lo puoi trovare ad esempio qui. C'è scritto C++, ma sia l'esempio che la funzione sono validi anche in C. Il ciclo principale del tuo problema diventerebbe quindi qualcosa come:
for (i = 0; str1[i] != '\0'; ++i) {
    if (NULL != strchr(str2, str1[i])) {
        str1[i] = '*';
    }
}

Sono ovviamente possibili anche altri metodi, ma credo che questo sia il più semplice.

Luca903
A ok ok adesso ci provo grazie mille

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.