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

批处理检查《千字文》是否有重复字

[复制链接]
发表于 2011-6-2 19:03:26 | 显示全部楼层
本帖最后由 mxxcgzxxx 于 2011-7-14 22:08 编辑

看到楼上的
  1. for /l %%a in (0 1 %n%)do Set/a "_!$:~%%a,1!+=1"
  2. Set _|find/v "=1"
复制代码
发现自己的思路是好窄!
但有趣的是我的机子在重复运行后会出错全都变成2了怎么回事?

原来是自己多复制了一次
发表于 2011-7-14 21:57:47 | 显示全部楼层
本帖最后由 mxxcgzxxx 于 2011-7-14 22:07 编辑

在原基础上提高重字效率
  1. @ECHO OFF
  2. setlocal EnableDelayedExpansion
  3. set a=0
  4. for /f "tokens=1-6 delims= " %%1 in (千字文.txt) do (
  5.             set /a a+=1 & set "a!a!=%%1"
  6.             set /a a+=1 & set "a!a!=%%2"
  7.             set /a a+=1 & set "a!a!=%%3"
  8.             set /a a+=1 & set "a!a!=%%4"
  9.             set /a a+=1 & set "a!a!=%%5"
  10.             set /a a+=1 & set "a!a!=%%6"
  11.             )
  12. set /a b=%a%-6
  13. for /l %%i in (%b%,1,%a%) do if "!a%%i!"==""  set /a a-=1
  14. set /a b=%a%*4
  15. echo 《千字文》篇幅总计有%b%字;
  16. pause>nul
  17. set c=
  18. for /l %%i in (%a%,-1,1) do echo,!a%%i! &set c=!c!!a%%i!
  19. pause>nul
  20. set /a b-=1
  21. set f=
  22. for /l %%1 in (1,1,%b%) do (
  23.    set "a=!c:~0,1!"
  24.    set "c=!c:~1!"
  25.    for %%i in (!a!) do set "d=!c:%%i=!"
  26.    if "!d!" neq "!c!" set "f=!f! !a!"
  27.    )
  28. echo  有以下重字:%f%
  29. pause>nul
复制代码
发表于 2011-8-8 16:25:23 | 显示全部楼层
低效无脑流

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (qianzhiwen.txt) do (
  3.         set a=%%i
  4.         set a=!a: =!
  5.         set b=!b!!a!
  6.         )

  7. for /l %%i in (1 1 10000) do (
  8.         set e=!b!
  9.         if "!e!"=="" (goto b)
  10.         set c=!e:~,1!
  11.         set #%%i=!c!
  12.         set /a n+=1
  13.         set e=!e:~1!
  14.         )

  15. :b
  16. echo there are !n! words in txt
  17. pause

  18. for /l %%i in (1 1 !n!) do (
  19.         echo %%1
  20.         pause
  21.         call if not "%%b:!#%%i!=%%"=="!b:~1!" (set/a m+=1&&set s!m!=!#%%i!&&set b=!b:~1!))
  22. if not defined m (echo there are no repeating words in txt) else (
  23.         echo there are !m! repeating words in txt , there are :
  24.         for /l %%i in (1 1 !m!) do (echo !s%%i!)
  25.         )
  26. pause
  27. set d=!n!
  28. :c
  29. if "!d!"=="0" (goto :eof&pause)
  30. set/a d3=!d!-3
  31. set/a d2=!d!-2
  32. set/a d1=!d!-1
  33. echo !#%d3%!!#%d2%!!#%d1%!!#%d%!
  34. set/a d=!d!-4
  35. goto c
复制代码
发表于 2014-4-8 20:41:27 | 显示全部楼层
笨方法也想了很久很久

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (a.txt) do (
  3. for %%j in (%%i) do (
  4. set /a n+=4
  5. set "str=%%j !str!")
  6. set "str1=!str: =!"
  7. call :lp !str!
  8. set str=)
  9. echo.&echo Total: %n%&echo.

  10. for /f "tokens=1,2 delims=.=" %%i in ('set .^|sort /+4 /r') do (
  11. if %%j gtr 1 (echo %%i = %%j&set str=flag) else (
  12. if not defined str echo 千字文沒有重字
  13. pause&exit))

  14. :lp
  15. if "%1" neq "" echo %1&shift
  16. set /a ".%str1:~,1%+=1"
  17. set "str1=%str1:~1%"
  18. if defined str1 goto lp
复制代码
发表于 2014-5-12 20:21:43 | 显示全部楼层
  1. @echo off
  2. for /f "tokens=1-6" %%i in (千字文.txt) do call set words=%%words%%%%i%%j%%k%%l%%m%%n&call set wordsCopy=%%words%%
  3. echo %words%>tempTxt.txt
  4. for %%p in (tempTxt.txt) do set /a number=(%%~zp-2)/2&call echo 1.该文共计%%number%%个汉字。
  5. pause>nul

  6. echo 2.检查是否有重复的字
  7. set bool=no
  8. :loop
  9. set word=%words:~0,1%
  10. set words=囧%words:~1%囧
  11. for /f "delims=%word% tokens=1,2" %%a in ("%words%") do if "%%b" neq "" echo 发现重复的汉字:%word%。&set bool=yes
  12. for /f "delims=囧" %%p in ("%words%") do set words=%%p
  13. if "%words%" neq "囧囧" goto loop
  14. if "%bool%"=="no" echo 没有重复的汉子。
  15. pause>nul

  16. echo 3.倒序输出
  17. set /a group=%number%/4
  18. for /l %%k in (1,1,%group%) do call echo %%wordsCopy:~-4%%&call set wordsCopy=%%wordsCopy:~0,-4%%
  19. echo 干完活啦!&pause>nul
复制代码
发表于 2014-5-12 22:52:09 | 显示全部楼层
我来也,powershell库丰富,我还是那个论点,学一年等于学bat5年,学一年等于学vbs3年。
这些题,都是powershell菜鸟题。

第一题:
把千字文读入字符串,然后unicode编码,-----这是负责,一般的做法,做了这一步后,中文,英文,乱码,空格啥的,都算一个字符。字符串自带长度属性,就是千字文的字符数,然后减去空格数量即可。


第二题
powershell 有 sort-object,具有排序去重功能。可以对数组对象去重,可以对行去重,当然了,这道题其实就是考核行去重。
。net 或者说powershell,的字符串类,有tochararray()方法。
用了这个方法后,“天地玄黄”就变成了 “天,地,玄,黄”即字符串变数组了。然后再去重,得出结果。
把千字文读入字符串,然后变成单个字符数组,然后再去重,然后和没去重前比较,得出结果。


第三题
多种解法,这里说说我的解法。
还把千字文读入字符串,然后以空格为分隔符,切割字符串,变成n个字串数组,数组第一个单位的内容为“天地玄黄”。然后按照 4321,8765,这样的顺序输出数组元素即可。

写出来的代码都极其简单,期待我群中菜鸟来作,敬请期待。。。
发表于 2014-5-12 23:11:12 | 显示全部楼层
我来也,powershell库丰富,我还是那个论点,学一年等于学bat5年,学一年等于学vbs3年。
这些题,都是powe ...
PowerShell 发表于 2014-5-12 22:52



   擦咧,原来Powershell要学一年? 让那些一个月学会其他语言的会员情何以堪?
发表于 2014-11-9 13:20:30 | 显示全部楼层
本帖最后由 shelluserwlb 于 2014-11-10 07:41 编辑
  1. @echo off
  2. color 9e
  3. setlocal EnableDelayedExpansion
  4. set /a num=0
  5. for /f "tokens=1-6" %%i in (千字文.txt) do (
  6.     set /a num+=1 & set str!num!=%%i
  7.     set /a num+=1 & set str!num!=%%j
  8.     set /a num+=1 & set str!num!=%%k
  9.     set /a num+=1 & set str!num!=%%l
  10.     set /a num+=1 & set str!num!=%%m
  11.     set /a num+=1 & set str!num!=%%n
  12. )
  13. set /a a=%num%-6
  14. for /l %%i in (%a%,1,%num%) do if defined str%%i set /a a=%%i
  15. set /a total= a * 4
  16. echo 《千字文》共有汉字字数:%total%个
  17. set str=
  18. for /l %%i in (%a%,-1,1) do (
  19.     set str=!str!!str%%i:~0,1!
  20.     set str=!str!!str%%i:~1,1!
  21.     set str=!str!!str%%i:~2,1!
  22.     set str=!str!!str%%i:~3,1!
  23.     echo !str%%i!
  24. )
  25. echo.
  26. set dup=
  27. for /l %%i in (0,1,%total%) do (
  28.     set ch=!str:~%%i,1!
  29.     if defined str[!ch!] set dup=!dup! !ch!
  30.     set str[!ch!]=!ch!
  31. )
  32. echo 简体字版《千字文》中重复的字有:!dup!
  33. endlocal
  34. echo.& pause
复制代码
发表于 2014-12-14 19:46:12 | 显示全部楼层
新手,第二题不会。想了多久没想出来。第一题:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :qu
  4. for /f "tokens=1-6 delims= " %%a in (F:\1.txt) do (
  5.        set var=%%a&call :jq&set var=%%b&call :jq&set var=%%c&call :jq&set var=%%d&call :jq&set var=%%e&call :jq&set var=%%f&call :jq)
  6. echo 一共有%js%字
  7. goto end
  8. :jq
  9. if not "%var%"=="" (set d1=%var:~-4,1%&if not "!d1!"==" " (set /a js+=1)) else (goto :eof)
  10. if not "%var%"=="" (set d2=%var:~-3,1%&if not "!d2!"==" " (set /a js+=1)) else (goto :eof)
  11. if not "%var%"=="" (set d3=%var:~-2,1%&if not "!d3!"==" " (set /a js+=1)) else (goto :eof)
  12. if not "%var%"=="" (set d4=%var:~-1,1%&if not "!d1!"==" " (set /a js+=1)&goto :eof) else (goto :eof)
  13. :end
  14. pause>nul
复制代码
发表于 2017-2-15 11:40:18 | 显示全部楼层
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f "delims=" %%a in (千字文.txt) do (
  4.         for %%b in (%%a) do set /p=%%b<nul
  5. ))>temp.txt
  6. for /f "skip=4 tokens=3 delims= " %%c in ('dir temp.txt') do (
  7.         set byte=%%c
  8.         set /a num=!byte:,=!/2
  9.         echo;千字文.txt中共有!num!个汉字&pause>nul
  10. )
复制代码
哈哈,就题解题,第一题可以这样做,请求【加分鼓励】
发表于 2017-2-24 14:34:57 | 显示全部楼层
高手在民间!!
发表于 2017-11-10 08:58:21 | 显示全部楼层
表示看不懂的路过,这个VBS还是BAT
发表于 2017-12-9 11:28:13 | 显示全部楼层
回复 2# Demon


    运行结果1002,应该是1000才对呀
发表于 2018-1-1 12:55:08 | 显示全部楼层
@echo off
setlocal EnableDelayedExpansion
set m=0
for /f "delims=" %%a in (千字文.txt) do (
    set x=%%a
    call :next !x: =!
)
echo 千字文共有!m!字
pause

:next
set "var=%~1"
set n=0

:loop
call set str=%%var:~!n!,1%%
if "%str%"=="" goto :eof
set /a n+=1,m+=1
goto loop
发表于 2018-1-3 02:58:43 | 显示全部楼层
第二题、第三题、第一题:
@echo off
setlocal EnableDelayedExpansion
for /f "delims=" %%a in (千字文.txt) do (
    for %%b in (%%a) do (
       set var=%%b
       for /l %%c in (0,1,3) do (
         set /a #!var:~%%c,1!+=1
        )   
     )
)
rem set #>>2.txt
  for /f "tokens=1,2 delims=#=" %%a in ('set #') do (
    if %%b gtr 1 echo 重复字:%%a 出现次数:%%b
)
echo:
echo:

for /f "tokens=1-6 delims= " %%a in (千字文.txt) do (
echo %%f
echo %%e
echo %%d
echo %%c
echo %%b
echo %%a
)
echo:
echo:
set m=0
for /f "delims=" %%a in (千字文.txt) do (
    set x=%%a
    call :next !x: =!
)
echo 千字文共有!m!字

:next
set "var=%~1"
set n=0

:loop
call set str=%%var:~!n!,1%%
if "%str%"=="" goto :eof
set /a n+=1,m+=1
goto loop

echo:
echo:

pause
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-16 22:41 , Processed in 0.012601 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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