[C] Riconoscere vocali e stamparle in un array

m45511
Salve, ho questo esercizio che non riesco a risolvere:
Scrivere un programma che ricevuta in ingresso stringa1 memorizzi e in stringa2 tutte le vocali contenute nella
stringa iniziale.

La mia soluzione proposta è la seguente:
char voc[2];
char s[4]="ciao"
int p=0;
for(i=0; i<4; i++){
if ( (s=='a') || (s=='e') || (s=='i') || (s=='o') || (s=='u') ){
voc

=s;
p++;
}
}

qualcuno mi può dare una mano?
Grazie per l'aiuto


Risposte
vict85
L'idea mi sembra corretta. Nei due vettori, specialmente il primo, hai dimenticato che le stringhe hanno il terminatore. Cosa non funziona esattamente?

minomic
Sì, anche a me sembra corretta (a parte il terminatore), però non è affatto "generica" come soluzione. Nel senso che hai specificato la dimensione dei vettori, ecc. dimostrando di conoscere "a priori" la lunghezza della stringa, il numero di vocali, ecc. Forse il testo voleva qualcosa di più generico...

Una possibile soluzione è questa:

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

#define MAX_SIZE 100


char * estrai_vocali(char *stringa)
{
    int i=0;
    char *vocali = malloc(MAX_SIZE * sizeof(char));
    int riempito = 0;
    
    for(i=0; i<strlen(stringa); ++i)
    {
        if((stringa[i] == 'a') || (stringa[i] == 'e') || (stringa[i] == 'i') || (stringa[i] == 'o') || (stringa[i] == 'u'))
            vocali[riempito++] = stringa[i];
    }
    
    /* inserisco il terminatore della stringa */
    vocali[riempito] = '\0';
    
    return vocali;    
}


int main()
{
    char stringa[MAX_SIZE];
    printf("Inserire una stringa: ");
    scanf("%s", stringa);
    
    printf("Le vocali sono: %s\n", estrai_vocali(stringa));
    
    return 0;    
}




:smt039

m45511
Vi ringrazio molto, in realtà il testo originale era il seguente:
Scrivere una funzione che ricevuta in ingresso una stringa, crea e restituisce al chiamante una stringa contenente tutte e sole vocali minuscole presenti nella stringa iniziale. La dimensione della stringa risultante deve essere tale da contenere tutte e sole le vocali minuscole.

Ho cambiato il testo per essere più sintetico(non riuscivo a copiare gli elementi nel nuovo vettore).
Dimenticavo il carattere di terminazione ' \0 ' nell'ultimo vettore.
Vi incollo la soluzione, adesso funziona tutto:

#include
#include
#include
#define size 30



int main(int argc, char *argv[])
{
char s[size];
int i;
int b_size=0;
int p=0;

printf("inserisci una stringa: \n");
scanf("%s", s);

//blocco per contare le vocali
for(i=0; i if ( s=='a' || s=='e' || s=='i' || s=='o' || s=='u' ){
b_size++;
}
}

printf("la stringa ha %d vocali \n", b_size);

//creo il nuovo vettore e copio le vocali in esso
char b[b_size];
for(i=0; i if ( s=='a' || s=='e' || s=='i' || s=='o' || s=='u' ){
b

=s;
p++;
}

}

b[b_size]='\0';

printf("la stringa di vocali e': %s \n", b);


system("PAUSE");
return 0;
}


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