Aiuto problema in c

di il
11 risposte

Aiuto problema in c

Ciao a tutti sono un programmatore alle prime armi,avrei bisogno di una mano per questo programma in c che mi ha reso vita difficile al compito:
se passo da linea di comando la parola mamme (.\es mamme) lui ritorna mae,stessa cosa con altre parole contenenti lettere uguali ripetute es. alternativa-->alterniv ecc.
grazie in anticipo per i consigli!!

11 Risposte

  • Re: Aiuto problema in c

    Devi scrivere un programma che elimina le ripetizioni in una stringa (ovvero stampa in output l'elenco non ordinato dei caratteri utilizzati)?
  • Re: Aiuto problema in c

    Sisi elimina le ripetizioni e le lettere non ripetute però devono rimanere ordinate come nella parola originale,come nell'esempio mamme-->mae
  • Re: Aiuto problema in c

    Crei un array di 256 interi che inizializzi a 0, chiamiamolo found.
    Analizzi la stringa carattere per carattere: per ogni carattere c, se found[c] è 0 allora imposti found[c] a 1 e stampi c, altrimenti non fai niente.
  • Re: Aiuto problema in c

    Grazie mille funziona!!
    #include <stdio.h>
    int main(int argc,char *argv[]){

    char *p,s[100],x[26]={0};
    int j,i=0,c;

    for(p=argv[1];*p!='\0';p++)
    s[i++]=*p;

    for(j=0;j<i;j++){
    c=s[j]-'a';
    if(x[c]==0){
    x[c]=1;
    printf("%c",s[j]);
    }
    }

    printf("\n");

    return 0;

    }
  • Re: Aiuto problema in c

    c=s[j]-'a';
    attenzione che il tuo indice vale solo per i caratteri minuscoli; magari potresti testare se il carattere è compreso fra 'a' e 'z' oppure fra 'A' e 'Z' ...
  • Re: Aiuto problema in c

    Ottimizzato grazie mille!!
    #include <stdio.h>
    int main(int argc,char *argv[]){

    char *p,s[100],x[26]={0};
    int j,i=0,c;

    for(p=argv[1];*p!='\0';p++)
    s[i++]=*p;

    for(j=0;j<i;j++){

    if(s[j]>=65 && s[j]<=90)
    c=s[j]-'A';
    else if(s[j]>=97 && s[j]<=122)
    c=s[j]-'a';

    if(x[c]==0){
    x[c]=1;
    printf("%c",s[j]);
    }
    }

    printf("\n");

    return 0;

    }
  • Re: Aiuto problema in c

    if(s[j]>=65 && s[j]<=90)
    c=s[j]-'A';
    else if(s[j]>=97 && s[j]<=122)
    c=s[j]-'a';
    else
    continue;
    Scusa se aggiungo il continue: ma almeno così eviti che se l'utonto inserisce ad esempio una cifra vada tutto in crash
  • Re: Aiuto problema in c

    Ottimo non ho considerato la cosa!!grazie!!
  • Re: Aiuto problema in c

    Ma basta un semplice vettore di controllo per tutti i caratteri.
    
    int main()
    {
        char one[256];
            memset(one,0,256);
    
        char mystr[] = "!Questa è la mia stringa!";
        char result[1024];
    
        int i,k;
        for (i = 0, k = 0; mystr[i]; i++)
        {
            if (!one[mystr[i]])
            {
                result[k++] = mystr[i];
                ++one[mystr[i]];
            }
        }
        result[k] = '\0';
    
        puts(result);
    
        return 0;
    }
    
  • Re: Aiuto problema in c

    E' quello che avevo proposto inizialmente
    Poi però questo sistema risulta case-sensitive; eventualmente si potrebbe fare in modo di settare one[] sia nelle maiuscole che nelle minuscole nel caso di valori fra 'a' e 'z' o fra 'A' e 'Z'.
  • Re: Aiuto problema in c

    E' quello che avevo proposto inizialmente
    Si l'avevo capito,e volevo sottolinearlo.
    è che il codice proposto non l'avevo capito subito....
    nel mio basta cambiare l'if in
    if ( !one[( mystr[i] >= 'a' && mystr[i] <= 'z' ) ? mystr[i] - 'a' : mystr[i]) ] )
    o qualcosa di piu umanamente comprensibile...
Devi accedere o registrarti per scrivere nel forum
11 risposte