Board logo

标题: [文本处理] [分享]批处理把字符串两两交换位置 [打印本页]

作者: Batcher    时间: 2022-3-22 22:43     标题: [分享]批处理把字符串两两交换位置

【问题描述】
字符串abcdef如何变成badcfe,就是一二项交换位置,三四项交换位置?
作者: Batcher    时间: 2022-3-22 22:45

【解决方案】
  1. @echo off
  2. set OldStr=abcdef
  3. set SuffixStr=%OldStr%
  4. set NewStr=
  5. :Loop
  6. if "%SuffixStr%" equ "" (
  7.     echo,%NewStr%
  8.     pause
  9.     goto :eof
  10. ) else (
  11.     set NewStr=%NewStr%%SuffixStr:~1,1%%SuffixStr:~0,1%
  12.     set SuffixStr=%SuffixStr:~2%
  13.     goto :Loop
  14. )
复制代码

作者: for_flr    时间: 2022-3-23 09:31

跟帖一个
  1. @echo off
  2. set "oldstr=abcdefghijklmn"
  3. :loop
  4. call set tmp=%%oldstr:~%n%,2%%
  5. if "%tmp%"=="" goto quit
  6. set /p new=%tmp:~-1%%tmp:~,1%<nul
  7. set /a n+=2
  8. if not "%tmp%"=="" goto loop
  9. :quit
  10. echo;&pause
复制代码

作者: for_flr    时间: 2022-3-23 09:37

  1. "abcdefghijklmn" -split '(\w\w)'|%{
  2.   $a=$_.tochararray()    #l两两切割转数组
  3.   [array]::reverse($a)    #颠倒数组顺序
  4.   $new+=$a
  5. }
  6. $new -join ""
复制代码

作者: went    时间: 2022-3-23 12:20

贴个递归版本,原理都类似
  1. function fn($str){
  2.     if($str.Length -lt 2){ return $str }
  3.     return $str.SubString(1,1) + $str.SubString(0,1) + (fn -str ($str.SubString(2)))
  4. }
  5. fn -str 'abcdefghijklmn'
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2