0

我有一个用户可定义长度的文本字符串作为示例,用户输入了 1234567890

我想要的是取出每个第一个字符,然后是每个第三个字符

所以我们得到以下

1st  | 1234567890 = 1
3rd  | 234567890  = 14
1st  | 23567890   = 142
3rd  | 3567890    = 1426
1st  | 357890     = 14263
3rd  | 57890      = 142638
1st  | 5790       = 1426385
3rd  | 790        = 14263850
1st  | 79         = 142638507
3rd  | 9          = 1426385079

我还需要考虑一个事实,即最后两个数字将少于三位数。

关于如何批量实现这一目标的任何想法?

4

1 回答 1

1

这是批处理字符串操作真正有用的地方:

@echo off
set str="1234567890"

for %%a in (%str%) do set str=%%~a
set newstr=
:Loop
set "first=%str:~0,1%"
set "fourth=%str:~3,1%"
set "str=%str:~1,2%%str:~4%"
set "newstr=%newstr%%first%%fourth%"
if not "%fourth%"=="" goto Loop
set "newstr=%newstr%%str:~1%%str:~0,1%

echo.%newstr%

对于1234567890您问题的示例输入,输出确实是:

1426385079

解释

此代码使用循环(在某种程度上相当于whileC 中的循环)。

在循环的每次迭代中,第一个和第四个字符都从 中提取str并附加到 中newstr,最终将保存最终输出。
接下来,str然后通过附加以下两个子字符串来更新:

  • %str:~1,2%从第二个字符开始提取两个字符(索引从 0 开始,因此第二个索引为 1)。
  • %str:~4%提取从第五个开始的所有字符

的新值str基本上是旧值,没有第一个和第四个字符。

str包含三个或更少的字符时,循环停止(即当fourth是一个空字符串!)。在循环之后,最后(三个或更少)字符被处理并以newstr正确的顺序附加——这是您要考虑的特殊情况。

希望有帮助!

于 2012-11-23T13:13:17.537 回答