标题: 批处理检查《千字文》是否有重复字 [打印本页]
作者: CrLf 时间: 2011-5-31 18:34 标题: 批处理检查《千字文》是否有重复字
千字文是中华民族的文化瑰宝,与三字经、百家姓合称“三百千”,历来是启蒙教材。白话盛行的今天,一群幼童摇头晃脑背书的场面几乎绝迹,而“天地玄黄,宇宙洪荒。日月盈仄,辰宿列张”的悠长吟诵声也悄然远去。
作为华夏儿女、龙的传人,何不在学批处理的同时重温国学经典。
以下三道题目,希望大家不仅只是解题,还能够能广开思路,举一反三:
1、计算千字文全文字数
2、证明千字文是否有重复字,若有则列举出来
3、四个字一组,逆序输出,组内字符顺序不变
比如:复制代码
颠倒后:复制代码
提示:
1、2题解题时空格不算在内,只判断汉字汉字。可以就题解题
评分依据:
思路>效率>简洁>无临时文件
以此为根据,评分从1~15分不等,非常优秀的思路另加5pb、1技术
千字文:- 天地玄黄 宇宙洪荒 日月盈昃 辰宿列张 寒来暑往 秋收冬藏
- 闰馀成岁 律吕调阳 云腾致雨 露结为霜 金生丽水 玉出昆冈
- 剑号巨阙 珠称夜光 果珍李柰 菜重芥姜 海咸河淡 鳞潜羽翔
- 龙师火帝 鸟官人皇 始制文字 乃服衣裳 推位让国 有虞陶唐
- 吊民伐罪 周发殷汤 坐朝问道 垂拱平章 爱育黎首 臣伏戎羌
- 遐迩一体 率宾归王 鸣凤在竹 白驹食场 化被草木 赖及万方
- 盖此身发 四大五常 恭惟鞠养 岂敢毁伤 女慕贞洁 男效才良
- 知过必改 得能莫忘 罔谈彼短 靡恃己长 信使可复 器欲难量
- 墨悲丝染 诗赞羔羊 景行维贤 克念作圣 德建名立 形端表正
- 空谷传声 虚堂习听 祸因恶积 福缘善庆 尺璧非宝 寸阴是竞
- 资父事君 曰严与敬 孝当竭力 忠则尽命 临深履薄 夙兴温凊
- 似兰斯馨 如松之盛 川流不息 渊澄取映 容止若思 言辞安定
- 笃初诚美 慎终宜令 荣业所基 籍甚无竟 学优登仕 摄职从政
- 存以甘棠 去而益咏 乐殊贵贱 礼别尊卑 上和下睦 夫唱妇随
- 外受傅训 入奉母仪 诸姑伯叔 犹子比儿 孔怀兄弟 同气连枝
- 交友投分 切磨箴规 仁慈隐恻 造次弗离 节义廉退 颠沛匪亏
- 性静情逸 心动神疲 守真志满 逐物意移 坚持雅操 好爵自縻
- 都邑华夏 东西二京 背邙面洛 浮渭据泾 宫殿盘郁 楼观飞惊
- 图写禽兽 画彩仙灵 丙舍傍启 甲帐对楹 肆筵设席 鼓瑟吹笙
- 升阶纳陛 弁转疑星 右通广内 左达承明 既集坟典 亦聚群英
- 杜稿钟隶 漆书壁经 府罗将相 路侠槐卿 户封八县 家给千兵
- 高冠陪辇 驱毂振缨 世禄侈富 车驾肥轻 策功茂实 勒碑刻铭
- 磻溪伊尹 佐时阿衡 奄宅曲阜 微旦孰营 桓公匡合 济弱扶倾
- 绮回汉惠 说感武丁 俊乂密勿 多士寔宁 晋楚更霸 赵魏困横
- 假途灭虢 践土会盟 何遵约法 韩弊烦刑 起翦颇牧 用军最精
- 宣威沙漠 驰誉丹青 九州禹迹 百郡秦并 岳宗泰岱 禅主云亭
- 雁门紫塞 鸡田赤城 昆池碣石 巨野洞庭 旷远绵邈 岩岫杳冥
- 治本于农 务资稼穑 俶载南亩 我艺黍稷 税熟贡新 劝赏黜陟
- 孟轲敦素 史鱼秉直 庶几中庸 劳谦谨敕 聆音察理 鉴貌辨色
- 贻厥嘉猷 勉其祗植 省躬讥诫 宠增抗极 殆辱近耻 林皋幸即
- 两疏见机 解组谁逼 索居闲处 沉默寂寥 求古寻论 散虑逍遥
- 欣奏累遣 戚谢欢招 渠荷的历 园莽抽条 枇杷晚翠 梧桐蚤凋
- 陈根委翳 落叶飘摇 游鹍独运 凌摩绛霄 耽读玩市 寓目囊箱
- 易輶攸畏 属耳垣墙 具膳餐饭 适口充肠 饱饫烹宰 饥厌糟糠
- 亲戚故旧 老少异粮 妾御绩纺 侍巾帷房 纨扇圆絜 银烛炜煌
- 昼眠夕寐 蓝笋象床 弦歌酒宴 接杯举觞 矫手顿足 悦豫且康
- 嫡后嗣续 祭祀烝尝 稽颡再拜 悚惧恐惶 笺牒简要 顾答审详
- 骸垢想浴 执热愿凉 驴骡犊特 骇跃超骧 诛斩贼盗 捕获叛亡
- 布射僚丸 嵇琴阮啸 恬笔伦纸 钧巧任钓 释纷利俗 竝皆佳妙
- 毛施淑姿 工颦妍笑 年矢每催 曦晖朗曜 璇玑悬斡 晦魄环照
- 指薪修祜 永绥吉劭 矩步引领 俯仰廊庙 束带矜庄 徘徊瞻眺
- 孤陋寡闻 愚蒙等诮 谓语助者 焉哉乎也
复制代码
链接: https://pan.baidu.com/s/1KccstnpWy1RQjyd2oaVS9Q?pwd=g3jy
作者: Demon 时间: 2011-5-31 19:36
本帖最后由 Demon 于 2011-5-31 19:58 编辑
第一题- @ECHO OFF
- SETLOCAL ENABLEDELAYEDEXPANSION
- FOR /F "delims=" %%i IN (千字文.txt) DO CALL :strlen %%i
- ECHO %n%
- PAUSE & GOTO :EOF
-
- :strlen
- SET str=%*
- SET str=%str: =%
- :strlen_loop
- IF "%str%" NEQ "" (
- SET /A n += 1
- SET str=!str:~1!
- GOTO :strlen_loop
- )
- GOTO :EOF
复制代码
作者: Demon 时间: 2011-5-31 19:50
本帖最后由 Demon 于 2011-5-31 20:16 编辑
第二题无法证明,“发 云 昆 巨 资 戚”这几个字不是重复了么?- @ECHO OFF
- SETLOCAL ENABLEDELAYEDEXPANSION
- FOR /F "delims=" %%i IN (千字文.txt) DO CALL :check %%i
- PAUSE & GOTO :EOF
-
- :check
- SET str=%*
- SET str=%str: =%
- :check_loop
- IF "%str%" NEQ "" (
- SET c=!str:~0,1!
- SET str=!str:~1!
- IF DEFINED dic[!c!] CALL ECHO %%dic[!c!]%% 重复
- SET dic[!c!]=!c!
- GOTO :check_loop
- )
- GOTO :EOF
复制代码
作者: CrLf 时间: 2011-5-31 19:58
2# Demon
能用for的地方建议不用call或goto,思路还有拓展的空间,不妨进一步展开想象。
作者: CrLf 时间: 2011-5-31 20:13
3# Demon
哈哈,这倒是,检查了下原来是我自己的代码错了,感谢提醒!
作者: mxxcgzxxx 时间: 2011-5-31 22:31
本帖最后由 mxxcgzxxx 于 2011-5-31 22:50 编辑
答个1,3,2题- @ECHO OFF
- SETLOCAL ENABLEDELAYEDEXPANSION
- set a=0
- for /f "tokens=1-6 delims= " %%1 in (千字文.txt) do (
- set /a a+=1 & set "a!a!=%%1"
- set /a a+=1 & set "a!a!=%%2"
- set /a a+=1 & set "a!a!=%%3"
- set /a a+=1 & set "a!a!=%%4"
- set /a a+=1 & set "a!a!=%%5"
- set /a a+=1 & set "a!a!=%%6"
- )
- set /a b=%a%-6
- for /l %%i in (%b%,1,%a%) do if "!a%%i!"=="" set /a a-=1
- set /a b=%a%*4
- echo 《千字文》篇幅总计有%b%字;
- pause>nul
- set c=
- for /l %%i in (%a%,-1,1) do echo,!a%%i! &set c=!c!!a%%i!
- pause>nul
- set /a d=b-1
- set f=
- for /l %%i in (1,1,%d%) do (
- set /a e=%%i+1
- for /l %%1 in (!e!,1,%b%) do if "!c:~%%i,1!"=="!c:~%%1,1!" set "f=!f! !c:~%%i,1!"
- )
- echo 有以下重字:%f%
- pause>nul
复制代码
作者: CrLf 时间: 2011-5-31 22:51
6# mxxcgzxxx
思路很好,找到了文本的规律所在,这是高效的前提。
不过代码还可以进一步简化。
作者: mxxcgzxxx 时间: 2011-5-31 22:53
我的重字较对那里花的时间有点多!
作者: neorobin 时间: 2011-5-31 23:46
本帖最后由 neorobin 于 2011-5-31 23:49 编辑
计算字串长度, 没有比此处
http://www.bathome.net/viewthrea ... muid=20015#pid74946
更好的代码, 就不写了- @echo off & setlocal enableDelayedExpansion
- for /f "delims=:" %%n in ('findstr /n /b /e :text "%~0"') do set jump=%%n
- for /f "skip=%jump% usebackq delims=" %%l in ("%~0") do set text=!text!%%l
- set text=!text: =!
- set kiloChr=!text!$
-
- for /l %%i in (999 -1 0) do (
- set tmp=!kiloChr!
- for %%c in (!kiloChr:~%%i^,1!) do (
- set kiloChr=!kiloChr:%%c=!
- if #!kiloChr:~%%i! neq #$ (
- set kiloChr=!tmp:~0,-2!$
- set duplicate=!duplicate!%%c
- )
- )
- )
- set duplicate
- pause
-
- for /l %%p in (12 16 1004) do (
- set /a qMin=%%p-12
- for /l %%q in (%%p -4 !qMin!) do echo,!text:~%%q,4!
- )
- pause
- exit
-
- :text
- 天地玄黄 宇宙洪荒 日月盈昃 辰宿列张 寒来暑往 秋收冬藏
- 闰馀成岁 律吕调阳 云腾致雨 露结为霜 金生丽水 玉出昆冈
- 剑号巨阙 珠称夜光 果珍李柰 菜重芥姜 海咸河淡 鳞潜羽翔
- 龙师火帝 鸟官人皇 始制文字 乃服衣裳 推位让国 有虞陶唐
- 吊民伐罪 周发殷汤 坐朝问道 垂拱平章 爱育黎首 臣伏戎羌
- 遐迩一体 率宾归王 鸣凤在竹 白驹食场 化被草木 赖及万方
- 盖此身发 四大五常 恭惟鞠养 岂敢毁伤 女慕贞洁 男效才良
- 知过必改 得能莫忘 罔谈彼短 靡恃己长 信使可复 器欲难量
- 墨悲丝染 诗赞羔羊 景行维贤 克念作圣 德建名立 形端表正
- 空谷传声 虚堂习听 祸因恶积 福缘善庆 尺璧非宝 寸阴是竞
- 资父事君 曰严与敬 孝当竭力 忠则尽命 临深履薄 夙兴温凊
- 似兰斯馨 如松之盛 川流不息 渊澄取映 容止若思 言辞安定
- 笃初诚美 慎终宜令 荣业所基 籍甚无竟 学优登仕 摄职从政
- 存以甘棠 去而益咏 乐殊贵贱 礼别尊卑 上和下睦 夫唱妇随
- 外受傅训 入奉母仪 诸姑伯叔 犹子比儿 孔怀兄弟 同气连枝
- 交友投分 切磨箴规 仁慈隐恻 造次弗离 节义廉退 颠沛匪亏
- 性静情逸 心动神疲 守真志满 逐物意移 坚持雅操 好爵自縻
- 都邑华夏 东西二京 背邙面洛 浮渭据泾 宫殿盘郁 楼观飞惊
- 图写禽兽 画彩仙灵 丙舍傍启 甲帐对楹 肆筵设席 鼓瑟吹笙
- 升阶纳陛 弁转疑星 右通广内 左达承明 既集坟典 亦聚群英
- 杜稿钟隶 漆书壁经 府罗将相 路侠槐卿 户封八县 家给千兵
- 高冠陪辇 驱毂振缨 世禄侈富 车驾肥轻 策功茂实 勒碑刻铭
- 磻溪伊尹 佐时阿衡 奄宅曲阜 微旦孰营 桓公匡合 济弱扶倾
- 绮回汉惠 说感武丁 俊乂密勿 多士寔宁 晋楚更霸 赵魏困横
- 假途灭虢 践土会盟 何遵约法 韩弊烦刑 起翦颇牧 用军最精
- 宣威沙漠 驰誉丹青 九州禹迹 百郡秦并 岳宗泰岱 禅主云亭
- 雁门紫塞 鸡田赤城 昆池碣石 巨野洞庭 旷远绵邈 岩岫杳冥
- 治本于农 务资稼穑 俶载南亩 我艺黍稷 税熟贡新 劝赏黜陟
- 孟轲敦素 史鱼秉直 庶几中庸 劳谦谨敕 聆音察理 鉴貌辨色
- 贻厥嘉猷 勉其祗植 省躬讥诫 宠增抗极 殆辱近耻 林皋幸即
- 两疏见机 解组谁逼 索居闲处 沉默寂寥 求古寻论 散虑逍遥
- 欣奏累遣 戚谢欢招 渠荷的历 园莽抽条 枇杷晚翠 梧桐蚤凋
- 陈根委翳 落叶飘摇 游鹍独运 凌摩绛霄 耽读玩市 寓目囊箱
- 易輶攸畏 属耳垣墙 具膳餐饭 适口充肠 饱饫烹宰 饥厌糟糠
- 亲戚故旧 老少异粮 妾御绩纺 侍巾帷房 纨扇圆絜 银烛炜煌
- 昼眠夕寐 蓝笋象床 弦歌酒宴 接杯举觞 矫手顿足 悦豫且康
- 嫡后嗣续 祭祀烝尝 稽颡再拜 悚惧恐惶 笺牒简要 顾答审详
- 骸垢想浴 执热愿凉 驴骡犊特 骇跃超骧 诛斩贼盗 捕获叛亡
- 布射僚丸 嵇琴阮啸 恬笔伦纸 钧巧任钓 释纷利俗 竝皆佳妙
- 毛施淑姿 工颦妍笑 年矢每催 曦晖朗曜 璇玑悬斡 晦魄环照
- 指薪修祜 永绥吉劭 矩步引领 俯仰廊庙 束带矜庄 徘徊瞻眺
- 孤陋寡闻 愚蒙等诮 谓语助者 焉哉乎也
复制代码
作者: batman 时间: 2011-6-1 12:05
先给个计算字数的vbs:- Dim vbstr, fso
- Set fso = CreateObject("scripting.filesystemobject")
- vbstr = fso.OpenTextFile("a.txt").ReadAll()
- MsgBox "千字文总字数为:" & Len(Replace(Replace(vbstr, Chr(32), ""), vbCrLf, ""))
- Set fso = Nothing
复制代码
作者: 523066680 时间: 2011-6-1 12:38
那个, 检查重复字的是不是用 那个文字做变量名,然后用if defined ... 来判断是否重复的。
作者: batman 时间: 2011-6-1 12:44
完整的:- Dim vbstr, fso, vbout, out, vbk, judge
- Set fso = CreateObject("scripting.filesystemobject")
- vbstr = Replace(fso.OpenTextFile("a.txt").ReadAll(), vbCrLf, "")
- judge = "没有"
- For Each out In Split(vbstr, Chr(32))
- vbout = out & vbCrLf & vbout
- For i = 1 To Len(out)
- If InStr(vbk, Mid(out, i, 1)) = 0 Then
- vbk = vbk & Mid(out, i, 1)
- Else
- judge = "有"
- End If
- Next
- Next
- MsgBox "千字文总字数为:" & Len(Replace(vbstr, Chr(32), "")) & "字," & judge & "重复"
- MsgBox vbout, , "倒序输出"
- Set fso = Nothing
复制代码
作者: CrLf 时间: 2011-6-1 12:47
本帖最后由 zm900612 于 2011-6-1 13:32 编辑
11# 523066680
还有别的方法,变量替换就至少有两三种
另外,大家别看第一题简单,其实方法不少,找到文本的规律就可以写出有针对性的思路,迥异的思路至少有三种
作者: 523066680 时间: 2011-6-1 12:59
本帖最后由 523066680 于 2011-6-1 13:09 编辑
第一题关于统计字符个数因为前人做过这么多折腾了,我就不折腾了,绕过。找最简单的,第二条。
以前有做过类似,我的目的是搞得结果人性化一点,代码没有优势- @echo off
- setlocal enabledelayedexpansion
- set line=0
- for /f "tokens=*" %%a in (src2.txt) do (
- set /a line+=1
- call :next "%%a" !line!
- )
- pause
- exit
-
- :next
- set str=%~1
- set /a x=0,xb=1
- :lp
- set get=!str:~%x%,1!
- if "%get%"==" " (set /a x+=1 &goto :lp)
- if defined SPEC_%get% (
- echo !SPEC_%get%:%get%=_%get%_!
- echo PK 行!line! !str:%get%=_%get%_!
- echo ,
- ) else (
- set SPEC_!str:~%x%,1!=行!line! !str!
- )
- set /a x+=1
- if not "!str:~%x%!"=="" (goto :lp) else (goto :eof)
复制代码
处理结果- 行5 吊民伐罪 周[发]殷汤 坐朝问道 垂拱平章 爱育黎首 臣伏戎羌
- PK 行7 盖此身[发] 四大五常 恭惟鞠养 岂敢毁伤 女慕贞洁 男效才良
- ,
- 行2 闰馀成岁 律吕调阳 [云]腾致雨 露结为霜 金生丽水 玉出昆冈
- PK 行26 宣威沙漠 驰誉丹青 九州禹迹 百郡秦并 岳宗泰岱 禅主[云]亭
- ,
- 行2 闰馀成岁 律吕调阳 云腾致雨 露结为霜 金生丽水 玉出[昆]冈
- PK 行27 雁门紫塞 鸡田赤城 [昆]池碣石 巨野洞庭 旷远绵邈 岩岫杳冥
- ,
- 行3 剑号[巨]阙 珠称夜光 果珍李柰 菜重芥姜 海咸河淡 鳞潜羽翔
- PK 行27 雁门紫塞 鸡田赤城 昆池碣石 [巨]野洞庭 旷远绵邈 岩岫杳冥
- ,
- 行11 [资]父事君 曰严与敬 孝当竭力 忠则尽命 临深履薄 夙兴温凊
- PK 行28 治本于农 务[资]稼穑 俶载南亩 我艺黍稷 税熟贡新 劝赏黜陟
- ,
- 行32 欣奏累遣 [戚]谢欢招 渠荷的历 园莽抽条 枇杷晚翠 梧桐蚤凋
- PK 行35 亲[戚]故旧 老少异粮 妾御绩纺 侍巾帷房 纨扇圆絜 银烛炜煌
- ,
复制代码
哟呵,下划线改成方括号比较直观。
作者: plp626 时间: 2011-6-2 18:37
本帖最后由 plp626 于 2011-6-2 19:35 编辑
好早看到这个题,以为是给新手的。
今天看到几个老鸟的代码有些意外。
版主是在考大家的词频统计算法(联盟的精华帖那个),怎么没人用啊:- @ECHO off&setlocal EnableDelayedExpansion
- Set $=&Set n=-1&for %%a in (
- 天地玄黄 宇宙洪荒 日月盈昃 辰宿列张 寒来暑往 秋收冬藏
- 闰馀成岁 律吕调阳 云腾致雨 露结为霜 金生丽水 玉出昆冈
- 剑号巨阙 珠称夜光 果珍李柰 菜重芥姜 海咸河淡 鳞潜羽翔
- 龙师火帝 鸟官人皇 始制文字 乃服衣裳 推位让国 有虞陶唐
- 吊民伐罪 周发殷汤 坐朝问道 垂拱平章 爱育黎首 臣伏戎羌
- 遐迩一体 率宾归王 鸣凤在竹 白驹食场 化被草木 赖及万方
- 盖此身发 四大五常 恭惟鞠养 岂敢毁伤 女慕贞洁 男效才良
- 知过必改 得能莫忘 罔谈彼短 靡恃己长 信使可复 器欲难量
- 墨悲丝染 诗赞羔羊 景行维贤 克念作圣 德建名立 形端表正
- 空谷传声 虚堂习听 祸因恶积 福缘善庆 尺璧非宝 寸阴是竞
- 资父事君 曰严与敬 孝当竭力 忠则尽命 临深履薄 夙兴温凊
- 似兰斯馨 如松之盛 川流不息 渊澄取映 容止若思 言辞安定
- 笃初诚美 慎终宜令 荣业所基 籍甚无竟 学优登仕 摄职从政
- 存以甘棠 去而益咏 乐殊贵贱 礼别尊卑 上和下睦 夫唱妇随
- 外受傅训 入奉母仪 诸姑伯叔 犹子比儿 孔怀兄弟 同气连枝
- 交友投分 切磨箴规 仁慈隐恻 造次弗离 节义廉退 颠沛匪亏
- 性静情逸 心动神疲 守真志满 逐物意移 坚持雅操 好爵自縻
- 都邑华夏 东西二京 背邙面洛 浮渭据泾 宫殿盘郁 楼观飞惊
- 图写禽兽 画彩仙灵 丙舍傍启 甲帐对楹 肆筵设席 鼓瑟吹笙
- 升阶纳陛 弁转疑星 右通广内 左达承明 既集坟典 亦聚群英
- 杜稿钟隶 漆书壁经 府罗将相 路侠槐卿 户封八县 家给千兵
- 高冠陪辇 驱毂振缨 世禄侈富 车驾肥轻 策功茂实 勒碑刻铭
- 磻溪伊尹 佐时阿衡 奄宅曲阜 微旦孰营 桓公匡合 济弱扶倾
- 绮回汉惠 说感武丁 俊乂密勿 多士寔宁 晋楚更霸 赵魏困横
- 假途灭虢 践土会盟 何遵约法 韩弊烦刑 起翦颇牧 用军最精
- 宣威沙漠 驰誉丹青 九州禹迹 百郡秦并 岳宗泰岱 禅主云亭
- 雁门紫塞 鸡田赤城 昆池碣石 巨野洞庭 旷远绵邈 岩岫杳冥
- 治本于农 务资稼穑 俶载南亩 我艺黍稷 税熟贡新 劝赏黜陟
- 孟轲敦素 史鱼秉直 庶几中庸 劳谦谨敕 聆音察理 鉴貌辨色
- 贻厥嘉猷 勉其祗植 省躬讥诫 宠增抗极 殆辱近耻 林皋幸即
- 两疏见机 解组谁逼 索居闲处 沉默寂寥 求古寻论 散虑逍遥
- 欣奏累遣 戚谢欢招 渠荷的历 园莽抽条 枇杷晚翠 梧桐蚤凋
- 陈根委翳 落叶飘摇 游鹍独运 凌摩绛霄 耽读玩市 寓目囊箱
- 易輶攸畏 属耳垣墙 具膳餐饭 适口充肠 饱饫烹宰 饥厌糟糠
- 亲戚故旧 老少异粮 妾御绩纺 侍巾帷房 纨扇圆絜 银烛炜煌
- 昼眠夕寐 蓝笋象床 弦歌酒宴 接杯举觞 矫手顿足 悦豫且康
- 嫡后嗣续 祭祀烝尝 稽颡再拜 悚惧恐惶 笺牒简要 顾答审详
- 骸垢想浴 执热愿凉 驴骡犊特 骇跃超骧 诛斩贼盗 捕获叛亡
- 布射僚丸 嵇琴阮啸 恬笔伦纸 钧巧任钓 释纷利俗 竝皆佳妙
- 毛施淑姿 工颦妍笑 年矢每催 曦晖朗曜 璇玑悬斡 晦魄环照
- 指薪修祜 永绥吉劭 矩步引领 俯仰廊庙 束带矜庄 徘徊瞻眺
- 孤陋寡闻 愚蒙等诮 谓语助者 焉哉乎也
- )do Set $=%%a^&echo/!$!&set/a n+=4
- ECHO %$%
- ECHO 总字数:%n%+1
- Set "$=!$:&echo/=!"
- for /l %%a in (0 1 %n%)do Set/a "_!$:~%%a,1!+=1"
- ECHO 重复字:
- Set _|find/v "=1"
- pause
复制代码
更新一下(修改关于字数n的计算):- @ECHO off&setlocal EnableDelayedExpansion
- Set $=&Set n=&for %%a in (
- rem ----- 复制千字文 粘贴到这里 -------
- )do Set $=%%a^&echo/!$!&set/a n+=4
- ECHO 总字数:%n%
- Set "#=!$:&echo/=!"
- for /l %%a in (%n% -1 1)do Set/a "_!#:~-%%a,1!+=1"
- ECHO 重复字:
- Set _|find /v "=1"
- set/p=按任意键开始逆序输出
- ECHO %$%
- pause
复制代码
作者: mxxcgzxxx 时间: 2011-6-2 19:03
本帖最后由 mxxcgzxxx 于 2011-7-14 22:08 编辑
看到楼上的- for /l %%a in (0 1 %n%)do Set/a "_!$:~%%a,1!+=1"
- Set _|find/v "=1"
复制代码
发现自己的思路是好窄!
但有趣的是我的机子在重复运行后会出错全都变成2了怎么回事?
原来是自己多复制了一次
作者: mxxcgzxxx 时间: 2011-7-14 21:57
本帖最后由 mxxcgzxxx 于 2011-7-14 22:07 编辑
在原基础上提高重字效率- @ECHO OFF
- setlocal EnableDelayedExpansion
- set a=0
- for /f "tokens=1-6 delims= " %%1 in (千字文.txt) do (
- set /a a+=1 & set "a!a!=%%1"
- set /a a+=1 & set "a!a!=%%2"
- set /a a+=1 & set "a!a!=%%3"
- set /a a+=1 & set "a!a!=%%4"
- set /a a+=1 & set "a!a!=%%5"
- set /a a+=1 & set "a!a!=%%6"
- )
- set /a b=%a%-6
- for /l %%i in (%b%,1,%a%) do if "!a%%i!"=="" set /a a-=1
- set /a b=%a%*4
- echo 《千字文》篇幅总计有%b%字;
- pause>nul
- set c=
- for /l %%i in (%a%,-1,1) do echo,!a%%i! &set c=!c!!a%%i!
- pause>nul
- set /a b-=1
- set f=
- for /l %%1 in (1,1,%b%) do (
- set "a=!c:~0,1!"
- set "c=!c:~1!"
- for %%i in (!a!) do set "d=!c:%%i=!"
- if "!d!" neq "!c!" set "f=!f! !a!"
- )
- echo 有以下重字:%f%
- pause>nul
复制代码
作者: scarcr 时间: 2011-8-8 16:25
低效无脑流- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%i in (qianzhiwen.txt) do (
- set a=%%i
- set a=!a: =!
- set b=!b!!a!
- )
-
- for /l %%i in (1 1 10000) do (
- set e=!b!
- if "!e!"=="" (goto b)
- set c=!e:~,1!
- set #%%i=!c!
- set /a n+=1
- set e=!e:~1!
- )
-
- :b
- echo there are !n! words in txt
- pause
-
- for /l %%i in (1 1 !n!) do (
- echo %%1
- pause
- call if not "%%b:!#%%i!=%%"=="!b:~1!" (set/a m+=1&&set s!m!=!#%%i!&&set b=!b:~1!))
- if not defined m (echo there are no repeating words in txt) else (
- echo there are !m! repeating words in txt , there are :
- for /l %%i in (1 1 !m!) do (echo !s%%i!)
- )
- pause
- set d=!n!
- :c
- if "!d!"=="0" (goto :eof&pause)
- set/a d3=!d!-3
- set/a d2=!d!-2
- set/a d1=!d!-1
- echo !#%d3%!!#%d2%!!#%d1%!!#%d%!
- set/a d=!d!-4
- goto c
复制代码
作者: keiamy 时间: 2014-4-8 20:41
笨方法也想了很久很久- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%i in (a.txt) do (
- for %%j in (%%i) do (
- set /a n+=4
- set "str=%%j !str!")
- set "str1=!str: =!"
- call :lp !str!
- set str=)
- echo.&echo Total: %n%&echo.
-
- for /f "tokens=1,2 delims=.=" %%i in ('set .^|sort /+4 /r') do (
- if %%j gtr 1 (echo %%i = %%j&set str=flag) else (
- if not defined str echo 千字文沒有重字
- pause&exit))
-
- :lp
- if "%1" neq "" echo %1&shift
- set /a ".%str1:~,1%+=1"
- set "str1=%str1:~1%"
- if defined str1 goto lp
复制代码
作者: hu_contact 时间: 2014-5-12 20:21
- @echo off
- for /f "tokens=1-6" %%i in (千字文.txt) do call set words=%%words%%%%i%%j%%k%%l%%m%%n&call set wordsCopy=%%words%%
- echo %words%>tempTxt.txt
- for %%p in (tempTxt.txt) do set /a number=(%%~zp-2)/2&call echo 1.该文共计%%number%%个汉字。
- pause>nul
-
- echo 2.检查是否有重复的字
- set bool=no
- :loop
- set word=%words:~0,1%
- set words=囧%words:~1%囧
- for /f "delims=%word% tokens=1,2" %%a in ("%words%") do if "%%b" neq "" echo 发现重复的汉字:%word%。&set bool=yes
- for /f "delims=囧" %%p in ("%words%") do set words=%%p
- if "%words%" neq "囧囧" goto loop
- if "%bool%"=="no" echo 没有重复的汉子。
- pause>nul
-
- echo 3.倒序输出
- set /a group=%number%/4
- for /l %%k in (1,1,%group%) do call echo %%wordsCopy:~-4%%&call set wordsCopy=%%wordsCopy:~0,-4%%
- echo 干完活啦!&pause>nul
复制代码
作者: PowerShell 时间: 2014-5-12 22:52
我来也,powershell库丰富,我还是那个论点,学一年等于学bat5年,学一年等于学vbs3年。
这些题,都是powershell菜鸟题。
第一题:
把千字文读入字符串,然后unicode编码,-----这是负责,一般的做法,做了这一步后,中文,英文,乱码,空格啥的,都算一个字符。字符串自带长度属性,就是千字文的字符数,然后减去空格数量即可。
第二题
powershell 有 sort-object,具有排序去重功能。可以对数组对象去重,可以对行去重,当然了,这道题其实就是考核行去重。
。net 或者说powershell,的字符串类,有tochararray()方法。
用了这个方法后,“天地玄黄”就变成了 “天,地,玄,黄”即字符串变数组了。然后再去重,得出结果。
把千字文读入字符串,然后变成单个字符数组,然后再去重,然后和没去重前比较,得出结果。
第三题
多种解法,这里说说我的解法。
还把千字文读入字符串,然后以空格为分隔符,切割字符串,变成n个字串数组,数组第一个单位的内容为“天地玄黄”。然后按照 4321,8765,这样的顺序输出数组元素即可。
写出来的代码都极其简单,期待我群中菜鸟来作,敬请期待。。。
作者: PakTC 时间: 2014-5-12 23:11
我来也,powershell库丰富,我还是那个论点,学一年等于学bat5年,学一年等于学vbs3年。
这些题,都是powe ...
PowerShell 发表于 2014-5-12 22:52
擦咧,原来Powershell要学一年? 让那些一个月学会其他语言的会员情何以堪?
作者: shelluserwlb 时间: 2014-11-9 13:20
本帖最后由 shelluserwlb 于 2014-11-10 07:41 编辑
- @echo off
- color 9e
- setlocal EnableDelayedExpansion
- set /a num=0
- for /f "tokens=1-6" %%i in (千字文.txt) do (
- set /a num+=1 & set str!num!=%%i
- set /a num+=1 & set str!num!=%%j
- set /a num+=1 & set str!num!=%%k
- set /a num+=1 & set str!num!=%%l
- set /a num+=1 & set str!num!=%%m
- set /a num+=1 & set str!num!=%%n
- )
- set /a a=%num%-6
- for /l %%i in (%a%,1,%num%) do if defined str%%i set /a a=%%i
- set /a total= a * 4
- echo 《千字文》共有汉字字数:%total%个
- set str=
- for /l %%i in (%a%,-1,1) do (
- set str=!str!!str%%i:~0,1!
- set str=!str!!str%%i:~1,1!
- set str=!str!!str%%i:~2,1!
- set str=!str!!str%%i:~3,1!
- echo !str%%i!
- )
- echo.
- set dup=
- for /l %%i in (0,1,%total%) do (
- set ch=!str:~%%i,1!
- if defined str[!ch!] set dup=!dup! !ch!
- set str[!ch!]=!ch!
- )
- echo 简体字版《千字文》中重复的字有:!dup!
- endlocal
- echo.& pause
复制代码
作者: ann 时间: 2014-12-14 19:46
新手,第二题不会。想了多久没想出来。第一题:- @echo off
- setlocal enabledelayedexpansion
- :qu
- for /f "tokens=1-6 delims= " %%a in (F:\1.txt) do (
- 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)
- echo 一共有%js%字
- goto end
- :jq
- if not "%var%"=="" (set d1=%var:~-4,1%&if not "!d1!"==" " (set /a js+=1)) else (goto :eof)
- if not "%var%"=="" (set d2=%var:~-3,1%&if not "!d2!"==" " (set /a js+=1)) else (goto :eof)
- if not "%var%"=="" (set d3=%var:~-2,1%&if not "!d3!"==" " (set /a js+=1)) else (goto :eof)
- if not "%var%"=="" (set d4=%var:~-1,1%&if not "!d1!"==" " (set /a js+=1)&goto :eof) else (goto :eof)
- :end
- pause>nul
复制代码
作者: taofan712 时间: 2017-2-15 11:40
- @echo off
- setlocal enabledelayedexpansion
- (for /f "delims=" %%a in (千字文.txt) do (
- for %%b in (%%a) do set /p=%%b<nul
- ))>temp.txt
- for /f "skip=4 tokens=3 delims= " %%c in ('dir temp.txt') do (
- set byte=%%c
- set /a num=!byte:,=!/2
- echo;千字文.txt中共有!num!个汉字&pause>nul
- )
复制代码
哈哈,就题解题,第一题可以这样做,请求【加分鼓励】
作者: niudd 时间: 2017-2-24 14:34
高手在民间!!
作者: sdjnab 时间: 2017-11-10 08:58
表示看不懂的路过,这个VBS还是BAT
作者: yhcfsr 时间: 2017-12-9 11:28
回复 2# Demon
运行结果1002,应该是1000才对呀
作者: wtuldn 时间: 2018-1-1 12:55
@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
作者: wtuldn 时间: 2018-1-3 02:58
第二题、第三题、第一题:
@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
作者: for_flr 时间: 2021-12-22 17:24
powershell练习一下题目。千字文保存为qzw.txt- $txt=(gc qzw.txt).split()|?{$_ -ne ""}
- $dic=@{}
- foreach($w in $txt){
- for($i=0;$i -le 3;$i++){
- if (!$dic.containskey($w[$i])){
- $dic[$w[$i]]=1
- } else {
- $dic[$w[$i]]+=1
- }
- }
- }
- write-host "千字文中有以下重复字"
- $dic.getenumerator()|?{$_.value -gt 1}
- [console]::readkey()
复制代码
作者: 772074834 时间: 2023-5-12 16:17
@echo off
setlocal enabledelayedexpansion
set /a total=0
:: 4字组合的个数
set /a word4num=0
for /f "delims=" %%i in (test.txt) do (
set line=%%i
for %%j in (!line!) do (
set word4=%%j
set desmap!word4num!=!word4!
set /a word4num+=1
set /a total+=4
for /l %%n in (0 1 3) do (
set temp=!word4:~%%n,1!
:: 打印重复的字
if defined dic[!temp!] echo !temp!重复
set dic[!temp!]=!temp!
)
)
)
:: 总的字数
echo 总字数:!total!
echo 点击继续,逆序打印
pause>nul
for /l %%m in (!word4num!, -1, 0) do (
set descnum=%%m
:: 逆序打印
call echo %%desmap!descnum!%%
)
作者: LTSC1809 时间: 2023-6-5 22:37
话说可不可以每进行到一个字,就把它和全文每个字对比一遍,这样效率很低,但是我实在只能想到这种...
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |