Ciao a tutti,devo scrivere un programma che una volta acquisita una stringa intervallata da dei punti(in sostituzione degli spazi per separare le parole),mi stampi la stringa mantenendo inalterate le posizioni delle parole ma invertendo la posizione delle lettere di ogni parola.Per esempio:
quanto.mi.piace -> otnauq.im.ecaip
Ho provato ad abbozzare qualcosa,credevo di esserci ma c'è un while che un pò mi frega perchè mi costringe a modificare il valore del contatore dopo,altrimenti resta fermo nella posizione dove ha trovato punto e non fa più nulla. Il problema è che escono fuori lettere che non c'entrano o dei simboli,quindi che inavvertitamente l'ho mandato a pescare caratteri un pò a caso.
L'idea alla base del mio programma era di contare il numero di punti in modo da avere automaticamente anche il numero di parole aggiungendo 1 al numero di punti. Sapendo il numero di parole so anche quante iterazioni del for principale devo fare.
In pratica dovrebbe leggere la parola fino al '.'.
C viene incrementato di volta in volta,senza mai venir reinizializzato,cosa che invece succede per NumL,ciò mi è utile per calcolare non solo il numero di lettere in ogni parola ma anche per porre dei limiti al do-while.
Ah una cosa, ma se io ho una stringa di 15 elementi,quando mi viene chiesto quanto deve essere grande il vettore cosa dico? 15 o 16? perchè mi sembrava di ricordare che uno spazietto andasse lasciato per \n,da qui l'idea della seconda condizione.....Grazie.
ho modificato un pò il codice man manocodice:#include <stdio.h> #include <stdlib.h> int main() { int p,n,i,j,z,NumL,c,count; char v[20]; char aux[20]; printf("\n inserire numero di elementi,punti inclusi \n"); do { printf("\n\n max 20 elementi\n\n "); scanf("%d",&n); } while(n<=0 || n>20); printf("\n\n inserire sequenza parole/punti\n\n"); scanf("%s",&v); printf(" %s ",v); for(i=0;i<n;i++) { aux[i]=v[i]; } p=0; for(i=0;i<n;i++) { if(v[i]=='.') { p++; } } c=0; for(i=0;i<p+1;i++) { NumL=0; while(v[c]!='.' && c<n) { NumL++; c++; printf(" %d-%d ",NumL,c); } count=c; c=c+1; j=count-NumL; z=c; do { aux[j]=v[z]; j++; z--; } while(j<count && z>NumL); } printf(" \n\n il vettore è stato riordinato nel modo seguente \n\n "); printf("%s",aux); system("pause"); return 0; }