GRAZIE! per l'aiuto ho risolto utilizzando lo switch case per i due casi,
caso 0:
incremento solo l'indice della mia stringa inserita;
caso 1:
copio i caratteri della parola nel nuovo array.
il tuo con utilizzo di una variabile che mi conta le parole e con il modulo2 ricavo la scelta dello switch.
Se a qualcuno dovesse servire ecco il mio esercizio:
/* Letta una stringa di N parole, contare da quanti caratteri e quante parole è composta.
Copiare in un nuovo Array tutte le parole di posto dispari e stampare il nuovo Array.
Analisi
--------
Dopo aver acquisito una stringa la passo in una funziona che con opportuni confronti e condizioni cerco di, le parole dispari
in una nuova stringa. Per far ciò mi sono servito dello switch case con due possibili casi (0/1) che con l'uso di una variabile
dichiarata "modulo" effettuo le due scelte dopo aver appunto calcolato il modulo di un contatore che ho usato per contare le
parole presenti in una stringa.
caso 0:
ovvero parola pari, quindi da non copiare nella stringa2, faccio solo l'incremento dell'indice stringa inserita
caso 1:
ovvero parola dispari, quindi da copiare in stringa2
Se consideriamo che le parole vengono identificate dalla presenza di uno spazio, se ad esempio la nostra stringa è :
"ciao come stai" in uscita dovremmo avere "ciao stai", ma per ovviare al problema che in stringa2 venissero copiati
il primo spazio dopo "ciao" e il secondo spazio dove "come", ho usato un ulteriore switch case che elimina tale spazio superfluo
Il codice viene commentato riga per riga.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>// usa tutte le funzioni sulle stringhe
#define lunmax 80 // Costante per il numero massimo di caratteri in una stringa
void elabora(char vet[]);//Prototipo funzione
int main()
{
int scelta,instringa=0;//scelta per la scelta del menù,
char strin[lunmax] ; //vettore di caratteri
do{
//######################################
//############### M E N U ' ############
//######################################
system("CLS"); // Pulitura schermo
system("title Esercizio Stringhe");//intestazione della finestra di esecuzione
system("color 0b"); // cambio colore sfondo e testo
printf("\n\n\n\t\t################## MENU' ################## \n");
printf("\t\t-------------------------------------------");
printf("\n\t\t 0. per uscire ");
printf("\n\t\t 1. Inserimento di una stringa ");
printf("\n\t\t 2. Elaborazione stringa ");
printf("\n\t\t-------------------------------------------");
printf("\n\t\t Fai la tua scelta :==> ");
scanf("%d",&scelta); // variabile di scelta per le varie opzioni del menu'
//________________________________________ Fine Menù ____________________________________
getchar();//dopo l'uso di uno scanf viene impostato automaticamente un ritorno a capo \n quindi un successivo gets
// in qualsiasi parte del codice, leggerebbe \n come un ritorno a capo della stringa da inserire. Per ovviare
// a questo problema viene utilizzato la funzione getchar() per cancellare appunto il ritorno a capo \n
switch (scelta) // scelta delle opzioni
{
case 0: //uscita
break;
case 1: // scelta per l'inserimento della stringa
printf("\n\nInserisci una stringa massimo 80 caratteri minuscoli : ");//stampo a videao la richiesta all'utente
gets(strin); // con scanf la stringa termina con uno spazio. per ovviare al problema si usa gets(stringa)
printf("La tua stringa e' stata inserita correttamente \n");
system("\nPause");// comando per impostare una pausa
instringa=1;// assegnazione per il controllo se è stata inserita una stringa prima di procedere al passo 2
break;
case 2: // scelta elaborazione della stringa, viene effettuata solo se è stata inserita una stringa
system("CLS");
system("color 0e");
if(instringa!=1) // controllo se è stata inserita una stringa
{
printf("\n\n\n\tAttenzione devi prima inserire una stringa con la scelta 1 del menu'\n\n\n");
system("PAUSE");
}
else // se è stata insireti una stringa il programma continua
{
printf("\n\nLa stringa da te inserita e' : %s\n",strin);
elabora (strin);//chiamata alla Funzione con passaggio della stringa acquisita
instringa=0;//assegnazione di verifica per far inserire una nuova stringa adogni avvio del menù
system("PAUSE");
}
}//switch
}while(scelta!=0);//chiusura del do iniziale e condizione del loop menù
//il programma terminerà quando dal menù si sceglierà '0'
return 0;
}
void elabora(char stringa[]) // funzione elabora
{
int i=0,j=0,cont=1,lung;// i e j=contatore per i cicli e/o indici vettori, conta=contatore per il carattere 'a' lung= lunghezza della stringa
int modulo;//per definire se copiare o meno nella stringa //parola= conteggio delle parole, app=variabile di appoggio per il cambio tipo
char stringa2[lunmax]; //Vettore appoggio per inserire la stringa senza spazi
while (stringa !='\0')//terminatore di stringa serve a scorrere tutta la stringa inserita
{
modulo=cont%2;// se il resto è 0 significa che non deve copiare la parola nella stringa2
if(stringa!=' ')// confronto per vedere se ci sono spazi vuoti
{
switch(modulo)
{
case 0: //caso PARI in cui bisogna solo spostare l'indice senza copiare in stringa2
i++;
break;
case 1: //caso DISPARI in cui bisongna copiare la porala in stringa2
stringa2[j]=stringa;// copia di ogni singolo carattere in stringa2
i++; //incremento indice della stringa
j++; //incremento indice della stringa2
break;
}//chiusura switch
}else //chiusura if
{ //inizio else
switch(modulo) // per che in stringa2 vengano copiati due spazi
{
case 0:
cont++;//conteggio parole
i++; //incremento indice stringa
j++; //incremento indice stringa2
break;
case 1:
cont++;//conteggio parole
stringa2[j]=stringa;
i++; //incremento indice vettore e conteggio caratteri
break;
}//chiusura switch
}//chiusura else
}//chiusura while
stringa2[j]='\0';//serve per definire la fine della stringa2
lung=i; // lung per mantere la grandezza della stringa, altrimenti la 'i' andrebbe perso con il prossimo ciclo for
printf("Nella stringa ci sono %d caratteri \nLe parole sono : %d \n",lung,cont);// stampa il numero di caratteri e il numero di parole
printf("\n\n\nLa stringa con le parole dispari e' :%s \n",stringa2);// stampa della nuova stringa con le sole parole di posto dipsari
printf("\n\n\n");// righe di separazione
system("\n\n\npause");
printf("\n\nATTENZIONE LA TUA STRINGA ORA E' STATA CANCELLATA \n");
}//Fine Funzione elabora
Bye bye!!