Есть несколько разных способов решить одну и ту же проблему.Это решение очень простое и не требует единой команды for
!Каждый простой шаг объясняется в коде.Возможно, самой «сложной» частью :/
является инициализация переменных, имеющих значения букв.
Эта строка:
set init="A=1" "B=2" "C=3" ... "X=5" "Y=1" "Z=1"
is точно такая же строка «начальных значений», которую вы разместили в вопросе.
Эта строка:
set %init: =&set %
- это простая замена, которая изменяет каждый пробел по &set
.Это означает, что предыдущая строка изменяется на:
set "A=1"&set "B=2"&set "C=3" ...&set "X=5"&set "Y=1"&set "Z=1"
и, после этого , строка выполняется ... Просто, не так ли?;)
@echo off
setlocal
rem Define initialization string
set init="A=1" "B=2" "C=3" "D=9" "E=4" "F=8" "G=2" "H=5" "I=2" "J=5" "K=2" "L=5" "M=4" "N=5" "O=2" "P=8" "Q=1" "R=9" "S=8" "T=7" "U=6" "V=6" "W=1" "X=5" "Y=1" "Z=1"
rem Initialize variables
set %init: =&set %
set "nums="
set "sum=0"
set /P "text=input: "
echo %text%
:loop
rem Get first char in text
set "char=%text:~0,1%"
rem Get code and add it to sum
set /A "code=%char%, sum+=code"
rem Join code to nums
set "nums=%nums%%code% "
rem Remove first char from text and repeat
set "text=%text:~1%"
IF DEFINED text GOTO :loop
ECHO %nums%
ECHO %sum%
Пример:
input: Atom
Atom
1 7 2 4
14
Пример вывода для вашего примера ввода: точно такой же , который вы перечислили выше...
РЕДАКТИРОВАТЬ : Добавлена новая версия
@echo off
setlocal
rem Define initialization string
set init="A=1" "B=2" "C=3" "D=9" "E=4" "F=8" "G=2" "H=5" "I=2" "J=5" "K=2" "L=5" "M=4" "N=5" "O=2" "P=8" "Q=1" "R=9" "S=8" "T=7" "U=6" "V=6" "W=1" "X=5" "Y=1" "Z=1"
rem Initialize variables
set %init: =&set %
:repeat
set "text= "
set /P "text=input: "
set "text=%text: =%"
if not defined text goto :EOF
set "out="
set "nums="
set "sum=0"
:loop
rem Get first char in text and join it to out
set "char=%text:~0,1%"
set "out=%out%%char% "
rem Get code and add it to sum
set /A "code=%char%, sum+=code"
rem Join code to nums
set "nums=%nums%%code% "
rem Remove first char from text and repeat
set "text=%text:~1%"
IF DEFINED text GOTO :loop
ECHO %out%
ECHO %nums%
ECHO %sum%
echo/
goto repeat
Пример:
input: Atom
A t o m
1 7 2 4
14
input: My name is Antonio
M y n a m e i s A n t o n i o
4 1 5 1 4 4 2 8 1 5 7 2 5 2 2
53
input:
РЕДАКТИРОВАТЬ : Еще одна более короткая версия, просто для удовольствия ...
@echo off
setlocal EnableDelayedExpansion
rem Define initialization string
set init="A=1" "B=2" "C=3" "D=9" "E=4" "F=8" "G=2" "H=5" "I=2" "J=5" "K=2" "L=5" "M=4" "N=5" "O=2" "P=8" "Q=1" "R=9" "S=8" "T=7" "U=6" "V=6" "W=1" "X=5" "Y=1" "Z=1"
rem Initialize one-letter variables
set %init: =&set %
:repeat
rem Read a line from user
set "text= "
set /P "text=input: "
set "text=%text: =%"
if not defined text goto :EOF
rem Insert a space between letters
set "out="
:loop
set "out=%out% %text:~0,1%"
set "text=%text:~1%"
IF DEFINED text GOTO :loop
set "out=%out:~1%"
rem Get the sum: replace the space between letters by a plus sign
set /A "sum=%out: =+%"
rem Show letters separated by space
echo %out%
rem Change spaces by "! !" to show *the values* of the letters via Delayed Expansion
echo !%out: =! !%!
echo %sum%
echo/
goto repeat