Eliminar Espacios Extras

El ejercicio que propongo es el siguiente, realizar un programa que dado un "_____string___cualquiera,_éste_tiene____que_eliminar_los__espacios____en_blanco_extras_______", los datos de entrada van desde un string de tamaño 1 hasta uno de 1024 caracteres.
Nota: Coloco guión subrayado para hacer notar los espacios en blanco extras ya que en ésta página esto ya está implementado
.
Para el ejemplo anterior el resultado debería ser :
"string cualquiera, éste tiene que eliminar los espacios en blanco extras"
Nos vemos...
Otros temas de interes

Que les parece esto:
::
CK1NOLASTWD
DUPTYPECSTR?
case
::
BINT0 1LAMBIND NULL$ OVERLEN$
#1+_ONE_DO
OVER INDEX@ DUP SUB$ DUP " " EQUAL
ITE
::
1GETLAM #1+ DUP 1PUTLAM
#1=case
::
OVER DUPLEN$ DUP SUB$ { NULL$ " " } FPTR 6 FD
#0=case
&$
:: DROPDUP LEN$ 1_#1-SUB$ ;
;
DROP
;
::
DUP { "." ";" "," } FPTR 6 FD #0<>
IT
::
SWAPDUP DUPLEN$ DUP SUB$ " " EQUAL
IT
:: DUPLEN$ 1_#1-SUB$ ; SWAP ;
&$ BINT0 1PUTLAM
;
LOOP
SWAPDROPDUP DUPLEN$ DUP SUB$ " "
EQUALcase
::
DUPLEN$ 1_#1-SUB$
;
;
SETSTACKERR
;
@
246.5 bytes
Código en system-rpl, con el adecuado control de errores y sus menzajes.
Por ejemplo: cuanado tenemos el siguiente menzaje "_______Hola _________ , __ escribo desde ______ Perú ________ .______ y ________ esto __________ es un _________ ejemplo __________________________ "
el programa devuelve:"Hola, escribo desde Perú. y esto es un ejemplo". debes notar que controla los espacios que pudiera existir al inicio como al final, y como las reglas dicen que una coma, punto y coma, punto deben de estar unidas a la palabra que lo antecede, también cuida de este detalla, pruebalo.
Edmundo


Otra Solución:
« 0. -> txt f
«
DO
IF
txt
" " @DOS ESPACIOS
POS DUP
THEN
DUP 1. - SWAP 1. + 1.E50 txt
UNROT SUB SWAP 1. SWAP txt UNROT
SUB SWAP + 'txt' STO
ELSE
DROP 1. 'f' STO
END
UNTIL
f
END
txt DUP NUM 32. == { TAIL } IFT
DUP SIZE DUPDUP 4. PICK UNROT SUB NUM
32. == { 1. - 1. SWAP SUB } IFT
»
»
Bytes: 264

Dos cosas: 1 estoy trabajando en mi respuesta (no he tenido mucho tiempo, se lo dedico a la pag), 2 porquero, si no es mucha molestia puedes cambiar los caracteres a la los de la tabla de conversion ASCII si no es mucha molestia!!!


Yo tampoco sabía como transformar los caracteres en Ascii, no se trata de cambiar carácter por carácter :roll: sería insoportable y además innecesario si ya un programa lo hace por tí :idea: y éste programa es el HpConnectivity Kit, lo conocen
.
Lo que tienes que hacer es seleccionar en tu calculadora (cuando entras en la plantilla de entrada de TRANSFER) en la opción que dice Xlat "Choose Caracter Translations", aquí deberías elegir Chr 128-255 y lo que se vé es ->255 luego le das ENTER ENTER para aceptar los cambios.
Ahora colocando tu Hp en modo SERVER y ejecutando el programa antes descrito lo transfieres a tu Pc, luego lo abres con un editor de texto (yo uso el bloc de notas) lo seleccionas y lo pegas en tu Post, es decir Aquí
Saludos...


Yo para transformar los caracteres hago algo muy similar en la plantilla TRANSFER lo configuro como dice Guillermo, pero en esta misma plantilla selecciono la fila, escojo tipo KERMIT y oprimo SEND. En el PC uso el Hyperterminal lo configuro a 9600 Bauds, selecciono el menu <transferir>, <recibir archivo>, selecciono protocolo KERMIT y aceptar.
Tengo otra solución al problema, pero solo funciona con la 49 (usa SREPL y DUPDUP)
%%HP: T(3)A(D)F(.);
\<<
DO " " " " SREPL
UNTIL NOT
END DUP HEAD " " ==
\<< TAIL
\>> IFT DUPDUP SIZE
DUP SUB " " ==
\<< 1 OVER SIZE 1 -
SUB
\>> IFT
\>>
Tamaño: 124 Bytes.

Unpocotarde pero aqui esta mi respuesta
%%HP: T(3)A(D)F(.);
\<<
"" s STO DUP
SIZE 1 \-> t x y
\<< WHILE x
REPEAT t y y
SUB DUP t y 1
- DUP SUB 3 PICK ==
SWAP " " == AND
IF
THEN DROP
ELSE s SWAP
y SWAP REPL 's'
STO
END 'x' DECR
'y' INCR DROP2
END s 's' PURGE
\>>
\>>
Tamaño: 215 bytes






Aquí está mi solución para éste ejercicio
%%HP: T(3)A(D)F(.);
\<< 0 "" ROT 1 OVER
SIZE
START
IF DUP HEAD " "
SAME
THEN
IF 3 PICK 0
==
THEN TAIL
ELSE ROT DROP
0 3 ROLLD TAIL SWAP
" " + SWAP
END
ELSE ROT DROP 1
3 ROLLD DUP HEAD
ROT SWAP + SWAP
TAIL
END
NEXT ROT DROP2
IF DUP DUP SIZE
DUP DUP 5 ROLLD SUB
" " SAME
THEN 1 ROT 1 -
SUB
ELSE SWAP DROP
END
\>>
Tamaño: 238 Bytes
Guillermo Núñez
(Todo lo dicho es en RPN!)