如何在Batch中返回数组的元素?

4

我的程序中有两个元素在数组列表中。我该如何将一个变量赋值为其中的一个元素?

以下是代码:

@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

我原本以为有一种标准的方法来解决这个问题。

请提供代码,我不知道你的数组或任何东西是如何设置的。 - Spencer May
你使用哪种编程语言?展示一些代码! - Sirko
1个回答

3
主要问题是你的代码没有创建任何 批处理数组
你的代码只创建一个名为 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函数有点慢,使用二进制搜索可以加快速度。
如何使用Batch计算字符串中的字符数?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接