Un paio di esercizi per lavorare con le stringhe in C. Li raggruppo in questo singolo post per le similitudini tra loro. L’idea è quella di leggere una stringa di testo su un opportuno vettore. Una funzione deve individuare i doppioni di lettere consecutive uguali oltre la seconda ripetizione ed eliminarle.
Es. aaaaaabbb123 -> deve diventare -> aabb123
La seconda funzione individua le sottoparole di due lettere uguali e le elimina
Es. aabb123 -> deve diventare -> 123
Come base per entrambi gli esercizi/funzioni, abbiamo creato una funzione di utilità che elimina una lettera in una parola effettuando uno shift delle lettere da destra verso sinistra.
/**
via parole da due caratteri
Leggi in input una stringa di testo. Elimina da tale stringa le porzioni di sottostringa da due e solo due lettere consecutive.
Es. aa1234rty -> 1234rty
*/
/**
Cancella i doppioni di lettera al massimo tenendoli due
Es. aaaaabbbbbbbai23 -> aabb23
*/
#include <stdio.h>
void cancellaLettera(char parola[], int posizione)
{
int i=posizione;
//effettuo uno shift da destra a sinistra
while(parola[i] != '\0')
{
parola[i] = parola[i+1];
i++;
}
}
void eliminaParoleDaDue(char parola[])
{
int i=0;
while (parola[i] != '\0')
{
if (parola[i] == parola[i+1] &&
parola[i+1] != parola[i+2])
{
cancellaLettera(parola, i);
cancellaLettera(parola, i);
}
else
i++;
}
}
void eliminaTriple(char parola[])
{
int i=0;
while (parola[i] != '\0')
{
if (parola[i] == parola[i+1] &&
parola[i+1] == parola[i+2])
cancellaLettera(parola, i+2);
else
i++;
}
}
int main()
{
char parola[100];
printf("Inserisci la stringa da analizzare ");
fgets(parola,100 ,stdin);
eliminaTriple(parola);
printf("%s ", parola);
eliminaParoleDaDue(parola);
printf("%s ", parola);
return 0;
}
Ultima modifica 17 Novembre 2022