Eliminazione caratteri duplicati

di il
2 risposte

Eliminazione caratteri duplicati

Salve ho un problema con un esercizio che mi è stato dato all'Università.
Il codice consiste nella eliminazione di caratteri duplicati, ad esempio: la frase "Accidenti al traffico" diventa "Acident lrfo"
Il fatto è che il mio codice in output non riporta né il testo inserito né il testo elaborato, cosa sbaglio?

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
    char s[1000];
    long n;
    printf("Leggi frase");
    scanf("%s",s);
    n=strlen(s);
    char ss[1000];
    for(int i=0; i<n; i++)
    {   for(int j=1; j<n; j++)
        {   if(s[i]!=s[j])
            s[i]=ss[i];
        }}
    printf("La frase iniziale era: %s \n", s);
    printf("La frase attuale è: %s \n",ss);
    return 0;
}
output:
Leggi fraseaccidenti
La frase iniziale era:
La frase attuale è:
Program ended with exit code: 0

2 Risposte

  • Re: Eliminazione caratteri duplicati

    Ti basta trovare in pratica i singoli caratteri che compongono una frase. Prendi carattere per carattere dalla frase e lo confronti che non sia stata inserita ancora nella frase finale.
    
        for(i=0; i<n; i++)
        {
            copia = 1;
            for(j=0;j<k;j++){
                if(s[i] == ss[j]) {
                    copia = 0;
                }
            }
            if(copia == 1) {
                ss[k] = s[i];
                k++;
            }
        }
    
    ovviamente il ciclo interno facendolo col while potresti risparmiarti qualche iterazione inutile
  • Re: Eliminazione caratteri duplicati

    Ci sono varie cose che non vanno:
    - quello all'interno del corpo dell'if è un errore di distrazione, giusto?
    - di default scanf() legge la stringa finché non incontra un whitespace (tra cui rientra il classico spazio), quindi se inserisci da tastiera la stringa "rosso verde", nel momento in cui vai a stamparla ti mostrerà la stringa "rosso". Il problema può essere risolto in vari modi, per esempio utilizzando la seguente sintassi:
    scanf("%[^\n]s", s);
    che dice a scanf() di leggere la stringa finchè non si incontra il carattere newline (ossia \n)
    oppure utilizzando la funzione fgets(), la cui chiamata nel caso specifico sarebbe:
    fgets(s, 1000, stdin);
    - presumo tu sappia che una stringa termina col carattere terminatore di stringa (ossia \0), peccato però che per la stringa ss te ne sia dimenticato;
    - infine la parte logica del programma (i due for in pratica) è completamente sbagliata... riflettici!

    EDIT:
    A scanso di equivoci, il mio post è riferito all'autore del topic!
Devi accedere o registrarti per scrivere nel forum
2 risposte