Programación General > Pascal

 Suprimir Vocales Repetidas De Una Cadena

(1/1)

Deiv:
Hola,
¿Cuál sería la Función para quitar vocales repetidas (unidas) de una cadena de manera que se convierta en una sola?
Por ejemplo:

'Arribaa en la mooontaña se divisabaa una llama que reecorría su traayectoo'

El resultado deberá ser

'Arriba en la montaña se divisaba una llama que recorría su trayecto'

En realidad las consonantes no deben afectarse, solo las vocales repetidas (seguidas).

Pregunto a manera de practicar y saber como aplicarlo para el objetivo que tengo. Ya sé que por ejemplo si se quita a "Coordinado" se vería mal como "Cordinado", pero como dije otro es el objetivo, y me bastará con vuestras orientaciones de las vocales para darme cuenta.
Un Saludo

Saiyan1:
Como empezarias el ejercicio?

Deiv:
Haber Yo pensaba utilizar la funcion Copy por ejemplo de manera que vaya comparando la cadena si en una cierta posición esta "x-vocal" comparar con la posición[i-1] si tiene el mismo contenido, y ahí no sé quizá con la procedure Delete ir quitando esos repetidos.

_.B._:
Mi primer impulso?

Crear una nueva variable (en caso de archivos, un nuevo archivo), y añadirle, caracter a caracter, todo caracter que no sea una vocal repetida.

Algo como:


--- Código: Text ---original: string;copia: string;...copia[1] := original[1];tam := 1;cont := 2;mientras cont <= tamaño de original hacer    si original[cont] es vocal Y si original[cont] = copia[cont - 1]        continuar con ciclo;    si no        copia[tam] := original[cont];        inc(tam);    inc(cont);... 
Espero te sirva :comp:

Vila1989:
Hola amigo. Aunque este problema fue planteado en enero, fue ayer cuando me inscribí en este sitio, así que anoche mismo escribí esta funcioncita en Turbo Pascal (que lo mismo sirve para Delphi). Quizás ya hayas resuelto el problema, pero como un problema puede tener múltiples soluciones, pues esta te servirá de seguro. Procuré optimizarla al máximo.

function EliminaRepeticiones(s:string):string;
var
   i:integer;
begin
   i:=2;
   while i<=length(s) do
      if (s in ['a','e','i','o','u']) and
         (s=s[i-1]) then
         delete(s,i,1)
      else
         inc(i);
   EliminaRepeticiones:=s;
end;


La función recibe como parámetro de entrada la cadena con las repeticiones y la devuelve ya sin ellas. Un ejemplo de programa principal que la use es el sgte:

var
   t:string;
begin
   write('Teclee cadena: ');
   readln(t);
   writeln;
   writeln(EliminaRepeticiones(t));
   readln;
end.


Espero te sea útil.

Navegación

[0] Índice de Mensajes

Ir a la versión completa