Array di caratteri

di il
10 risposte

Array di caratteri

Salve a tutti, sto studiando da poco tempo il C, sono arrivato agli Array e fin quì ho fatto if else, while, do while, for.
Non riesco a risolvere mediante le cose che ho fatto fin'ora questo esercizio:
Si leggano da input alcuni caratteri alfabetici (max 10) e si riscrivano in uscita evitando di ripetere caratteri già stampati.
Io ho fatto qualcosa del genere che ovviamente è sbagliata, potreste darmi una mano a risolvere sempre mediante le cose che ho studiato fin'ora?

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

main () {
    char A[4];
    char B[4];
    int inseriti=0,i,j;

    while (inseriti<4){
        printf("inserisci carattere:");
        scanf("%c",&A[inseriti]);
        fflush(stdin);
        inseriti++;
    }
    for(inseriti=0;inseriti<4;inseriti++){
        for(i=0;i<4;i++) {
            if (A[inseriti]==A[i])
                B[inseriti]=A[inseriti];

            else
               B[inseriti]=A[i];
        }
        }
   for(j=0;j<4;j++) {
   printf("%c",B[inseriti]);
   }
   printf("\n");
   system("pause");
   return 0;
} 
Gli array li ho fatti da 4 elementi, in modo tale da sbrigarmi nella fase di prova. Fino all'inserimento dei dati all'interno dell'array va bene, il problema è che non saprei come implementare il fatto che se uno dei caratteri è ripetuto non lo deve stampare a video. In questo modo inserendo 4 caratteri mi stampa il primo inserito per 4 volte.
So benissimo che avrò fatto un mare di cavolate, ma come vi ripeto sono all'inizio.
Grazie in anticipo a chi mi aiuterà

10 Risposte

  • Re: Array di caratteri

    Devi adottare un'altra strategia. Dato che si tratta di caratteri alfabetici (per ora pensiamo solo ai minuscoli), questi saranno 26.
    Utilizza quindi un array di 26 elementi numerici che inizializzi tutti a 0.
    Quando li visualizzi, controlla prima che l'elemento corrispondente nel vettore (elemento 0 per la a, elemento 1 per la b, ...) sia uguale a zero e, dopo averlo visualizzato, lo poni uguale a 1. In questo modo, prima di visualizzare il prossimo carattere, se trovi l'elemento corrispondente uguale a 1, non lo visualizzi perché l'avevi già fatto.
  • Re: Array di caratteri

    Grazie mille per la risposta, ma come faccio ad associare ad ogni elemento dell'Array i vari caratteri?
    C'è un modo veloce, piuttosto che andare a scrivere elemento per elemento?
  • Re: Array di caratteri

    Il codice Ascii
  • Re: Array di caratteri

    Scusa la mia ignoranza, ma non ti seguo, ho visto il codice ASCII ma non saprei come fare all'atto pratico.
    Potresti farmi un esempio gentilmente? Scusami tanto il disturbo
  • Re: Array di caratteri

    Int cod = (int)'a';

    restituisce il codice Ascii della a
  • Re: Array di caratteri

    E per farlo per tutti i 26 caratteri minuscoli, devo farlo 26 volte? Non c'è un altro modo per dichiararli tutti in una volta?
  • Re: Array di caratteri

    Che vuoi dire? Non ti capisco.... No sai usare i cicli?

    Hai provato a scrivere il codice?
  • Re: Array di caratteri

    Si alla fine ho risolto, non ho utilizzato il codice ascii ma ho usato un array di 26 elementi e ho inserito tutto l'alfabeto minuscolo.
    Grazie per il tuo aiuto
  • Re: Array di caratteri

    Secondo ASCII il carattere 'a' ha valore 97, quindi per accedere all'array che ti suggerisce Oregon puoi indicizzarne gli elementi da 0 a 25 usando '(lettera)'-97 oppure '(lettera)'-'a'. Ad esempio...
    int a[26] = {0}; /* con {0} azzeri il contenuto dell'intero array */
    
    /* se, per ipotesi, volessi inserire 1 nell'elemento dell'array **
    ** che corrisponde alla lettera 'f' ti basterebbe fare cosi'... */
    
    a['f'-97] = 1; /* 'f' equivale a 102, quindi a['f'-97] equivale ad a[5] */
    
    /* in alternativa, considerando che 97 equivale in tutto e per tutto **
    ** ad 'a' (che e' una costante), potresti anche scrivere cosi'...    */
    
    a['f'-'a'] = 1; /* 'f' equivale a 102 ed 'a' equivale a 97,   **
                    **  quindi a['f'-'a'] equivale ancora ad a[5] */
  • Re: Array di caratteri

    peppe1992 ha scritto:


    Si alla fine ho risolto, non ho utilizzato il codice ascii ma ho usato un array di 26 elementi e ho inserito tutto l'alfabeto minuscolo.
    E come ? Con tante if ? Con uno switch ?

    Riprova con il codice Ascii ...
Devi accedere o registrarti per scrivere nel forum
10 risposte