核心目标是实现 字符串竖向排版(支持多种参数设置),并包含两个关键功能:

  1. ReverseString 函数:实现字符串反转。
  2. VerticalString 函数:将字符串以竖排形式排版,支持从左到右或从右到左的方向,支持设置每列字数,以及支持精确字符分割(考虑到汉字等双字节字符)。

 

chars=
(
赵客缦胡缨,吴钩霜雪明。
银鞍照白马,飒沓如流星。
十步杀一人,千里不留行。
事了拂衣去,深藏身与名。
闲过信陵饮,脱剑膝前横。
将炙啖朱亥,持觞劝侯嬴。
三杯吐然诺,五岳倒为轻。
眼花耳热后,意气素霓生。
救赵挥金槌,邯郸先震惊。
)

MsgBox % VerticalString(chars,1,"",1)

;;字符串反转
ReverseString(ByRef String) {
  String .= "", DllCall("msvcrt.dll\_wcsrev", "Ptr", &String, "CDecl")
  return String
}

MsgBox % ReverseString("十步杀一人,千里不留行。")

/*
  Right:1—竖排从右始排版0—竖排从左始排版
  Rows:每列字数
  U:精确分割字符串,很多双字节汉字用StrSplit分割不行 U参为1时用正则精准分割
*/
;;字符串竖向排版
VerticalString(ByRef String,Right=0,delimiter:="",U=0,Rows=12){
  index:=1, result:="",tarr:=[]
  If (!String)
    return []
  String:=RegExReplace(String,"(*BSR_ANYCRLF)\R|\t")
  if U {
    While index:=RegExMatch(String, "O).", match, index){
      if match.Value
        tarr.push(match.Value), index+=match.Len
    }
  }

  tarr:=StrSplit(String),Col:=Ceil(objCount(tarr)/Rows)
  Loop, % Rows
  {
    Index:=A_Index
    Loop, % Col
    {
      result.=tarr[(Right?Col-A_Index:A_Index-1)*Rows+Index]?tarr[(Right?Col-A_Index:A_Index-1)*Rows+Index] delimiter:A_Space A_Space A_Space delimiter
    }
    result:=Trim(result,delimiter) "`r`n"
  }
  String:=result,result:=""
  Clipboard:=String
  Return String
}

 

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。