标题: [已解决]如何判断输入的是中文还是英文?
[打印本页]
作者: tireless
时间: 2008-9-19 20:03
标题: [已解决]如何判断输入的是中文还是英文?
RT
[ Last edited by tireless on 2008-9-21 at 04:19 PM ]
作者: HAT
时间: 2008-9-19 20:06
@echo off
set/p input=输入:
set str=%input%
:loop
set str=%str:~1%
set/a n+=1
if not "%str%" == "" goto loop
for /f "skip=1 delims=:" %%i in ('^(echo "%input%"^&echo.^)^|findstr /o ".*"') do set/a l=%%i-5
if %n% == %l% (
echo 字符串 %input% 不包含双字节字符
) else (
echo 字符串 %input% 包含双字节字符
)
pause
作者: HAT
时间: 2008-9-19 20:07
作者: tireless
时间: 2008-9-19 20:15
thx
[ Last edited by tireless on 2008-9-20 at 04:36 PM ]
作者: BC
时间: 2008-9-20 08:51
能用判断geq Z吗?
作者: tireless
时间: 2008-9-20 21:09
进一步问这个问题,帮帮忙啊
要求:计算字符的“值”
中文字符=19
英文(包括空格)=10
例如输入 123 一二,则计算出 4*10+2*19 的结果
作者: moniuming
时间: 2008-9-20 22:09
不知这样可不可以:
@echo off
setlocal enabledelayedexpansion
:bgn
set "n="
set /p str=请输入:
:agn
set "var=%str:~,1%"
if %var% gtr Z (set /a n+=19) else (set /a n+=10)
if not "%str:~1%"=="" (set "str=%str:~1%"&goto :agn)
echo %n%
goto :bgn
作者: tireless
时间: 2008-9-20 22:21
标题: re 7 楼
有空格时不行
作者: moniuming
时间: 2008-9-20 22:24
Originally posted by tireless at 2008-9-20 22:21:
有空格时不行
难道也要计算空格的值???
作者: moniuming
时间: 2008-9-20 22:34
如果不计算空格的值,把空格去掉不就行了嘛...
@echo off
setlocal enabledelayedexpansion
:bgn
set "n="
set /p str=请输入:
set "str=%str: =%"
set "str=%str: =%"
:agn
set "var=%str:~,1%"
if %var% gtr Z (set /a n+=19) else (set /a n+=10)
if not "%str:~1%"=="" (set "str=%str:~1%"&goto :agn)
echo %n%
goto :bgn
作者: tireless
时间: 2008-9-20 22:37
要计算空格的值。空格的值和英文的相同。
作者: HAT
时间: 2008-9-20 23:13
标题: Re 11楼
7楼的代码在比较的时候加上双引号行吗?
@echo off
setlocal enabledelayedexpansion
:bgn
set "n="
set /p str=请输入:
:agn
set "var=%str:~,1%"
if "%var%" gtr "Z" (set /a n+=19) else (set /a n+=10)
if not "%str:~1%"=="" (set "str=%str:~1%"&goto :agn)
echo %n%
goto :bgn
作者: radem
时间: 2008-9-20 23:36
Originally posted by HAT at 2008-9-20 11:13 PM:
7楼的代码在比较的时候加上双引号行吗?
[code]@echo off
setlocal enabledelayedexpansion
:bgn
set "n="
set /p str=请输入:
:agn
set "var=%str:~,1%"
if & ...
可行!
作者: tireless
时间: 2008-9-20 23:49
Originally posted by HAT at 2008-9-20 03:13 AM:
7楼的代码在比较的时候加上双引号行吗?
[code]@echo off
setlocal enabledelayedexpansion
:bgn
set "n="
set /p str=请输入:
:agn
set "var=%str:~,1%"
if & ...
恩,初试没有问题。但是我输入
床前明月光,疑是地上霜。举头望明月,低头思故乡。,计算的结果就有问题了。
总共是 24 个字符,结果应该是:24*19=456
而这里计算的结果是 420
中文标点算中文吧
作者: HAT
时间: 2008-9-21 01:30
标题: Re 14楼
那就用2楼的思路吧
@echo off
setlocal enabledelayedexpansion
set /p "str=请输入:"
set sum=0
:loop
set "char=%str:~0,1%"
for /f "skip=1 delims=:" %%a in ('^(echo."%char%"^&echo.^)^|findstr /o ".*"') do set /a len=%%a-5
if %len% equ 1 (
set /a sum+=10
) else if %len% equ 2 (
set /a sum+=19
)
set "str=%str:~1%"
if "%str%" neq "" (
goto :loop
)
:show
echo.%sum%
作者: tireless
时间: 2008-9-21 07:44
Originally posted by HAT at 2008-9-20 05:30 AM:
那就用2楼的思路吧
[code]@echo off
setlocal enabledelayedexpansion
set /p "str=请输入:"
set sum=0
:loop
set "char=%str:~0,1%"
for /f "skip=1 delims=:" ...
这个没有用,不管输入什么批处理都会退出
[
Last edited by tireless on 2008-9-20 at 01:33 PM ]
作者: metoo
时间: 2008-9-21 08:13
归根结底就是findstr的正则太肉
作者: moniuming
时间: 2008-9-21 10:21
再试试这个如何?
改一下,支持特殊字符:
@echo off
setlocal enabledelayedexpansion
:bgn
type nul>t_.txt
set "n="&set "count="
set /p str=请输入:
:agn
>>t_.txt echo.!str:~,1!
if not "!str:~1!"=="" (set "str=!str:~1!"&goto :agn)
>>t_.txt echo god
for /f "delims=:" %%a in ('findstr /o .* t_.txt') do (
set /a "n+=1","m=n-1"
set "_!n!=%%a"
if !n! geq 2 (
call set /a "var=%%_!n!%%-%%_!m!%%"
if !var! equ 4 (set /a count+=19) else (set /a count+=10)
)
)
echo %count%
goto :bgn
[
Last edited by moniuming on 2008-9-21 at 10:27 AM ]
作者: tireless
时间: 2008-9-21 10:36
标题: Re 18 楼
计算不正确。
床前明月光,疑是地上霜。举头望明月,低头思故乡。 的计算结果是 240。正确的应该是 456。
作者: moniuming
时间: 2008-9-21 11:33
@echo off
setlocal enabledelayedexpansion
:bgn
del t_.txt 1>nul 2>nul
set "n="&set "count="
set /p str=请输入:
:agn
set st=!str:~,1!
>>t_.txt echo.!st!
if not "!str:~1!"=="" (set "str=!str:~1!"&goto :agn)
>>t_.txt echo god
for /f "delims=:" %%a in ('findstr /o .* t_.txt') do (
set /a "n+=1","m=n-1"
set "_!n!=%%a"
if !n! geq 2 (
call set /a "var=%%_!n!%%-%%_!m!%%"
if !var! equ 4 (set /a count+=19) else (set /a count+=10)
)
)
echo %count%
goto :bgn
[
Last edited by moniuming on 2008-9-21 at 11:41 AM ]
作者: HAT
时间: 2008-9-21 11:34
标题: Re 16楼
15楼代码的运行结果:
C:\Test>test.bat
请输入:床前明月光,疑是地上霜。举头望明月,低头思故乡。
456
能把你的测试用例和测试结果贴出来看看吗?
作者: tireless
时间: 2008-9-21 11:44
额,15 楼的代码有用。计算太慢了,昨晚我以为批处理没有反应,没等结果出来就关掉了...
作者: moniuming
时间: 2008-9-21 11:53
经多次测试,20楼的通过各种测试,而且效率还可以,试试?
[ Last edited by moniuming on 2008-9-21 at 11:55 AM ]
作者: tireless
时间: 2008-9-21 21:29
最后一次整合...
20 楼的代码完全不会出错。我想在原基础上再加上一些命令处理,可是我写的代码有点问题,所以再麻烦下各位,顺便整合在一起。
想在原基础上再进行这些处理:
1、还要显示输入的是什么
2、输入后,首先进行这些判断:
如果:
直接回车,则执行命令
输入的是 /h,则执行命令然后退出
输入的是 /s,则执行命令然后退出
输入的是 /r,则执行命令然后退出
再判断下面的:
是否以 /h 开头,如果是,则截取 /h 后面的字符,然后执行命令
是否以 /s 开头,如果是,则截取 /s 后面的字符,然后执行命令
以下是我修改后的代码:
■: 原 20 楼的代码 ■: 我加上的
@echo off
setlocal enabledelayedexpansion
:bgn
del t_.txt 1>nul 2>nul
set "n="&set "count="
set /p str=请输入:
if not defined str goto 11
If %str%==/h 执行命令 & exit
If %str%==/s 执行命令 & exit
If %str%==/r 执行命令 & exit
if /i "%str:~,2%"=="/h" (
set str=%str:~2%
执行命令
goto settext
)
if /i "%str:~,2%"=="/s" (
set str=%str:~2%
执行命令
)
:settext
set Text=%str%
:agn
set st=!str:~,1!
>>t_.txt echo.!st!
if not "!str:~1!"=="" (set "str=!str:~1!"&goto :agn)
>>t_.txt echo god
for /f "delims=:" %%a in ('findstr /o .* t_.txt') do (
set /a "n+=1","m=n-1"
set "_!n!=%%a"
if !n! geq 2 (
call set /a "var=%%_!n!%%-%%_!m!%%"
if !var! equ 4 (set /a count+=19) else (set /a count+=10)
)
)
echo %count%
echo %text%
goto :bgn
:11
...
测试结果是,有空格就会出错。
(错误不出在别处,就在我添加的那段里运行中断了)
[ Last edited by tireless on 2008-9-21 at 01:53 AM ]
作者: zqz0012005
时间: 2008-9-21 22:07
If %str%==/h 执行命令 & exit
...
if /i "%str:~,2%"=="/h"
怎么后面知道加引号,前面为何不加
作者: tireless
时间: 2008-9-22 09:11
怎么后面知道加引号,前面为何不加
加上引号后,输入空格没有问题了。却还有另外的问题:
请输入:(*^__^*) 嘻嘻……
此时不应有 嘻嘻……。
请输入:(**) 嘻嘻
此时不应有 嘻嘻。
请输入:O(∩_∩)O哈哈
此时不应有 O哈哈。
请输入:O(∩_∩)O
此时不应有 O。
是什么原因?
用以下代码做测试:@echo off
:s
set /p str=请输入:
if not defined str echo 未定义&goto :s
If "%str%"=="/h" echo 执行/h命令&goto :s
If "%str%"=="/s" echo 执行/s命令&goto :s
If "%str%"=="/r" echo 执行/r命令&goto :s
if /i "%str:~,3%"=="/h " (
set str=%str:~3%
echo 执行/h命令
goto showtext
)
if /i "%str:~,3%"=="/s " (
set str=%str:~3%
echo 执行/s命令
)
:showtext
echo %str%
goto s
[
Last edited by tireless on 2008-9-21 at 02:52 PM ]
作者: moniuming
时间: 2008-9-22 11:45
试试?
@echo off
Setlocal Enabledelayedexpansion
:s
set "str="
set /p str=请输入:
if not defined str echo 未定义&goto :s
If /i "!str!"=="/h" echo 执行/h命令&goto :s
If /i "!str!"=="/s" echo 执行/s命令&goto :s
If /i "!str!"=="/r" echo 执行/r命令&goto :s
if /i "!str:~,3!"=="/h " (
set "str=!str:~3!"
echo 执行/h命令
goto showtext
)
if /i "!str:~,3!"=="/s " (
set "str=!str:~3!"
echo 执行/s命令
)
:showtext
echo !str!
goto s
[
Last edited by moniuming on 2008-9-22 at 12:03 PM ]
作者: tireless
时间: 2008-9-22 12:18
标题: re 27 楼
没问题了。
谢谢大家耐心的帮助。