3

プログラムの配列リストに2つの要素があります。要素の1つに等しい変数を割り当てるにはどうすればよいですか?

コードは次のとおりです。

@echo off
setlocal enabledelayedexpansion
set /p string=
for /l %%a in (0,1,1000) do if not "!String:~%%a,1!"=="" set /a length=%%a+1
set i=0
:input
set str=%string:~0,1%
if "%str%"=="M" set array[i]=1000
if "%str%"=="D" set array[i]=500
if "%str%"=="C" set array[i]=100
if "%str%"=="L" set array[i]=50
if "%str%"=="X" set array[i]=10
if "%str%"=="I" set array[i]=1
set string=%string:~1%
set /a i=i+1
if %i%==%length% goto logic
goto input
:logic

私は本当にこれを行うための標準的な方法がありましたが。

4

1 に答える 1

2

主な問題は、コードがバッチ配列を作成しないことです。
あなたのコードは、という名前の変数を1つだけ作成array[i]しますが、次のような配列を作成したいと思います。

array[0]=1000
array[1]=500

次に、次のようなものが必要です

setlocal EnableDelayedExpansion
set i=0
:inputLoop
set "str=%string:~0,1%"
if "%str%"=="M" set array[%i%]=1000
if "%str%"=="D" set array[%i%]=500
if "%str%"=="C" set array[%i%]=100
if "%str%"=="L" set array[%i%]=50
if "%str%"=="X" set array[%i%]=10
if "%str%"=="I" set array[%i%]=1
set "string=%string:~1%"
set /a i+=1
if NOT %i%==%length% goto :inputLoop

:logic
rem ** logic begins
for /L %%n in (1 1 %i%) do (
   echo !array[%%n]!
   set /a value=array[%%n]
)

また、ロジック部分では、配列要素にアクセスする方法を確認できます。

ところで。strlen関数は少し遅いですが、バイナリ検索を使用すると高速になる可能性があります。
バッチで文字列内の文字を数える方法は?

于 2012-05-30T08:39:32.250 に答える