找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
楼主: happy886rr

批处理编程挑战题“物以类聚”-将字母按大小写归并

[复制链接]
发表于 2017-4-15 02:37:40 | 显示全部楼层
回复 3# pcl_test


    用 [char[]] 好像也行:[char[]]'bBAathToHOMmEe' ...
发表于 2017-4-15 02:54:38 | 显示全部楼层
  1. @for %%a in (a-z A-Z) do @echo aAbBdD | grep -o [%%a] | gawk "ORS=s;1"
复制代码

评分

参与人数 1技术 +1 收起 理由
523066680 + 1 达人

查看全部评分

发表于 2017-4-15 10:48:48 | 显示全部楼层
本帖最后由 523066680 于 2017-4-15 10:57 编辑

回复 24# happy886rr


    Matrix67我知道,还买了他的第一版书作为支持。现在他博客上有很多更新文章还未看,忙于工作和重新补习不同语言的语法(糖)。
发表于 2018-9-1 15:08:20 | 显示全部楼层
回复 6# 一年前挖下的坑
来自1年之后的填坑:

  1. ;Code By 老刘
  2. ;编译环境:MASM32 SDK
  3. ;编译指令:ml /coff 字母按大小写归并.ASM /link /subsystem:console
  4. ;调用方法:CMD传参,参数1为要处理的字符串。
  5. ;其他:非大小写字母的字符将被丢弃;传入字符串长度最长为126字符。

  6. Include Masm32rt.INC
  7. .Data?
  8.         Arg db 128 dup (?)
  9.         UpperCaseString db 128 dup (?)
  10.         LowerCaseString db 128 dup (?)
  11.         NewString db 128 dup (?)
  12. .Code
  13. Start:
  14.         Invoke ArgClC,1,Offset Arg
  15.         .If Eax == 1
  16.                 Mov Esi,Offset Arg
  17.                 Mov Ecx,Offset LowerCaseString
  18.                 Mov Edx,Offset UpperCaseString
  19.                
  20.                 .While Al != 0        ;分割为两个字符串
  21.                         LodSB
  22.                         .If Al >= 41h && Al <= 5Ah
  23.                                 Mov Byte Ptr [Edx],Al
  24.                                 Inc Edx
  25.                         .ElseIf Al >= 61h && Al <= 7Ah
  26.                                 Mov Byte Ptr [Ecx],Al
  27.                                 Inc Ecx
  28.                         .EndIf
  29.                 .EndW
  30.                
  31.                 ;合并到同一个字符串中。
  32.                 Mov Edi,Offset NewString
  33.                
  34.                 ;处理小写字符串
  35.                 Sub Ecx,Offset LowerCaseString
  36.                 Mov Esi,Offset LowerCaseString
  37.                 Rep MovSB
  38.                
  39.                 ;处理大写字符串
  40.                 Sub Edx,Offset UpperCaseString
  41.                 Mov Ecx,Edx
  42.                 Mov Esi,Offset UpperCaseString
  43.                 Rep MovSB
  44.                
  45.                 ;字符串结尾
  46.                 Mov Al,0Ah
  47.                 StoSB
  48.                 Xor EAX,EAX
  49.                 StoSB
  50.                
  51.                 ;回显字符串
  52.                 Invoke StdOut,Offset NewString
  53.         .EndIf
  54.         Invoke ExitProcess,NULL
  55. End Start
  56. End
复制代码

评分

参与人数 1技术 +1 收起 理由
happy886rr + 1

查看全部评分

发表于 2018-9-2 01:31:45 | 显示全部楼层
回复 3# pcl_test


    思维敏捷
 楼主| 发表于 2018-9-3 21:26:24 | 显示全部楼层
本帖最后由 happy886rr 于 2018-9-3 21:29 编辑

回复 34# 老刘1号
技术有长进,我都改行了,不再写任何代码。
发表于 2018-9-4 00:06:17 | 显示全部楼层

  1. @echo off
  2. set "str=bBAathToHOMmEe"
  3. echo;%str%>%temp%\$
  4. sed "s/[A-Z]//g" %temp%\$
  5. sed "s/[a-z]//g" %temp%\$
  6. del %temp%\$
复制代码
  1. @echo off
  2. set "str=bBAathToHOMmEe"

  3. :lp
  4. set "ch=%str:~,1%"
  5. for %%a in (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,e,s,t,u,v,w,x,y,z) do (
  6.         if "%%a"=="%ch%" (set "LowerCASE=%LowerCASE%%%a")
  7. )
  8. for %%a in (A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z) do (
  9.         if "%%a"=="%ch%" (set "UperCASE=%UperCASE%%%a")
  10. )
  11. set "str=%str:~1%"
  12. if "%str%" neq "" goto :lp
  13. echo;%LowerCASE%%UperCASE%
复制代码
发表于 2018-9-5 19:28:49 | 显示全部楼层
回复 36# happy886rr


    感谢大佬支持,
大佬改行实在是可惜啊……
为啥突然不搞了呢?
发表于 2018-9-26 08:33:58 | 显示全部楼层
用纯perl试试
  1. #!perl
  2. my $test = 'bBAathToHOMmEe';
  3. print sort { ( $b cmp '^' ) <=> ( $a cmp '^' ) } split '', $test;
复制代码

评分

参与人数 1PB +6 收起 理由
523066680 + 6 居然有其他人用Perl

查看全部评分

发表于 2018-9-28 10:09:00 | 显示全部楼层
只要能实现这种效果就行。
  1. # include <stdio.h>
  2. # include <stdlib.h>
  3. # include <string.h>

  4. char* classify (char*);

  5. int main (){
  6.     char *test = "bBAathToHOMmEe";
  7.     char *clas = classify(test);

  8.     puts(clas);

  9. }

  10. # define new(T, N) malloc ((N) *sizeof(T))
  11. char* classify(char *test){
  12.     int len   = strlen (test);
  13.     char *ret = new(char, len + 1);
  14.     ret[len]  = 0;
  15.     int i = 0, j = len - 1;

  16.     for (char *a = test, *b = test + j; i <= j; a++, b--) {
  17.         if (*a >= 'a') ret[i++] = *a;
  18.         if (*b <  'a') ret[j--] = *b;
  19.     }
  20.     return ret;
  21. }
复制代码

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 1

查看全部评分

发表于 2018-9-28 13:07:57 | 显示全部楼层
回复 36# happy886rr


    啊?改行了?
发表于 2018-9-28 13:38:16 | 显示全部楼层
回复 36# happy886rr

    才看到你说改行,好奇现在做什么了?业余也不写代码了吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 00:24 , Processed in 0.024261 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表