Un esercizio un po’ insolito sulla ricorsione e array di caratteri da dove si vuole eliminare i caratteri adiacenti “doppioni”. Un esercizio apparentemente semplice ma che nasconde alcune insidie. L’argomento della ricorsione è molto battuto soprattutto nei percorsi accademici di informatica, meno nelle scuole superiori dove i programmi sono già abbastanza gravosi.
Vogliamo realizzare una funzione ricorsiva che “riduca” le coppie di lettere identiche ripetute all’interno di un vettore di caratteri.
Esempi:
f(aabbcd)=abcd
f(aaaabbbbcd)=f(aabbcd)=abcd
/***
Vogliamo realizzare una funzione ricorsiva che "riduca" le coppie di lettere
Esempi:
f(aabbcd)=abcd
f(aaaabbbbcd)=f(aabbcd)=abcd
*/
#include <iostream>
#include <string.h>
#define N 20
using namespace std;
void stampa (char _stringa[])
{
int i;
int lungh = strlen(_stringa);
for (i=0; i < lungh; i++)
{
if (_stringa[i]!='\0')
printf("%c", _stringa[i]);
}
}
char * f(char _stringa[])
{
int i,k;
int spostato=0;
int lungh = strlen(_stringa);
for(i=0; i < N; i++)
{
//controllo due letetre adiacenti
if (_stringa[i] == _stringa[i+1])
{
//devo reimpostare la stringa per eliminare la coppia
//sposto tutto di una lettera verso sinistra
for(k=i; k < lungh; k++)
{
_stringa[k]=_stringa[k+1];
spostato++;
}
}
}
//stampa(_stringa);
if (spostato) //se ho spostato qualcosa, faccio un ulteriore passaggio di controllo
return f(_stringa);
return _stringa;
}
int main()
{
char stringa[20]=" ";
stampa(stringa);
char *s;
printf("Inserisci la stringa da verificare: ");
scanf("%s", stringa);
s = f(stringa);
stampa(s);
return 0;
}
Ultima modifica 6 Settembre 2023