String_9+-+Quitar+espacios+sobrantes

=__**Eliminar espacios adicionales y contar palabras de una frase**__=

Escribir un programa que lea una linea de texto que contenga espacios adicionales, al principio, entre palabras y al final de la frase. El programa deber  eliminar todos los espacios adicionales y contar las palabras que tiene la frase. Para ello se utilizar n los siguientes subprogramas:

INIC   Recibe una cadena de caracteres y devuelve la misma cadena sin los espacios del principio de la frase.

FIN    Idem con los espacios del final de la frase.

INTER  Idem con los espacios intermedios adicionales, dejando un único espacio entre palabras.

CONTAR Contar  las palabras que tiene la frase.

code format="pascal" PROGRAM P_63_E_9 ; USES Crt ; CONST iLONG_FISICA = 80   ; cUN_ESPACIO  = ' '  ; sDOS_ESPACIOS = ' ' ; TYPE tsCadena = String [iLONG_FISICA] ; VAR sCadena : tsCadena ; cEspera : Char ;

FUNCTION fnsInic (sCadena : tsCadena) : tsCadena ; BEGIN WHILE (Length (sCadena) > 0) AND (sCadena[1] = cUN_ESPACIO) DO        Delete (sCadena, 1, 1) ;

fnsInic := sCadena ; END ; { fnsInic }

FUNCTION fnsFin (sCadena : tsCadena) : tsCadena ; BEGIN WHILE (Length (sCadena) > 0) AND (sCadena[Length (sCadena)] = cUN_ESPACIO) DO       Delete (sCadena, Length (sCadena), 1) ;

fnsFin := sCadena ; END ; { fnsFin }

FUNCTION fnsInter (sCadena : tsCadena) : tsCadena ; VAR byPosicion : Byte ; BEGIN byPosicion := Pos (sDOS_ESPACIOS, sCadena) ; WHILE (byPosicion <> 0) DO       BEGIN Delete (sCadena, byPosicion, 1) ; byPosicion := Pos (sDOS_ESPACIOS, sCadena) END ;

fnsInter := sCadena ; END ; { fnsInter }

FUNCTION fnbyContar (sCadena : tsCadena) : Byte ; VAR i, byPalabras : Byte ; BEGIN byPalabras := 0 ; FOR i := 1 TO Length (sCadena) DO      IF sCadena[i] = cUN_ESPACIO THEN byPalabras := byPalabras + 1 ;

fnbyContar := byPalabras + 1 END ; { fnbyContar }

BEGIN {**************** PROGRAMA PRINCIPAL *********************} Writeln ; Writeln ('Escriba una frase con excesivos espacios en blanco:') ; Readln (sCadena) ; Writeln ; Writeln ('Cadena le¡da (encerrada entre caracteres #):') ; Writeln ('---') ; Writeln ('#', sCadena, '#') ;

sCadena := fnsInic (sCadena) ;

sCadena := fnsFin (sCadena) ;

sCadena := fnsInter (sCadena) ;

{ Mostrar la cadena resultante } Writeln ; Writeln ; Writeln ('Cadena con los espacios excesivos eliminados:') ; Writeln ('') ; Writeln ('#', sCadena, '#') ;

Writeln ; Writeln ;

{ Contar palabras de la cadena } IF Length (sCadena) = 0 THEN Writeln ('Numero de palabras: 0') ELSE Writeln ('Numero de palabras: ', fnbyContar (sCadena)) ;

cEspera := ReadKey ; END. code