Salve, come da titolo avrei bisogno di un aiuto sul seguente codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char *s1;
int i, j, dim;
printf("Inserire la dimensione della stringa: ");
scanf("%d",&dim);
dim++; //incremento necessario per creare lo spazio al carattere terminatore
while ('\n'!=getchar()); //"mangia" il carattere newline per evitare conflitti con fgets
s1=(char*)malloc(sizeof(char)*dim); // allocazione dinamica
fgets(s1,dim,stdin); //inserimento stringa
printf("\n---------------------------------------------------------------\nStringa di partenza: %s",s1); //stampo la stringa inserita da tastiera
for(i=0;i<dim-1;i++){
if((s1[i]==s1[i+1]) || (s1[i]+32==s1[i+1]) || (s1[i]==s1[i+1]+32)){
for(j=i;j<dim;j++){
char temp=s1[j];
s1[j]=s1[j+1];
s1[j+1]=temp;
}
dim--;
}
}
s1=(char*)realloc(s1,sizeof(char)*dim);
printf("\n%d\nStringa rielaborata: %s",n,s1);
}
L'idea sarebbe:
-Inserisci la dimensione della stringa
-Alloca dinamicamente la dimensione all'array di char (stringa)
-Inserisci la stringa da tastiera
-Inserisci un ciclo for che scorra i singoli caratteri mediante un indice "i";
-Inserisci un blocco condizionale if per controllare la presenza di doppie
-Inserisci, all'interno del blocco condizionale if, un ciclo for con un indice di scorrimento j che viene posto uguale ad i (posizione dove viene rilevata la sequenza di caratteri uguali) fino a dim-1 ed esegui un tot di scambi tra caratteri per portare a fine stringa i caratteri da eliminare (dunque dopo il carattere terminatore)
-al termine del ciclo for più interno, decrementa di un'unità la variabile dim;
-quando anche il ciclo più esterno sarà finito, rialloca la memoria dell'array per utilizzare solo quella necessaria a contenere il "nuovo" array
-stampa l'array dopo le modifiche;
Penso di aver sbagliato qualcosa negli scambi, nonostante il codice compili. Grazie anticipatamente per chi mi riesce ad indirizzare.