标题: [文本处理] 我的字符串大小写互换的代码错在哪里? [打印本页]
作者: 悬崖之树 时间: 2013-2-8 18:31 标题: 我的字符串大小写互换的代码错在哪里?
本帖最后由 悬崖之树 于 2013-2-8 18:46 编辑
里面的变量:
str 待处理字符串
m 英文小写字符表
n 英文大写字符表
a 用来按顺序取得str里的每一个字符
c 保存由a指定的字符
b 在for循环中的计数器,用来存取待处理字符在字符表里的序号
d 用不同的值表示待转换字符是在m还是n中找到的,如果d等于3的话,就说明不是英文字符,直接输出。
out 接收每个转换好的字符- @echo off&setlocal enabledelayedexpansion
- set str=asDFGhjklQ
- set m=abcdefghijklmnopqrstuvwxyz
- set n=ABCDEFGHIJKLMNOPQRSTUVWXYZ
- set a=-1
-
- :loop
- set /a a+=1
- set c=!str:~%a%,1!
- if "%c%" equ "" goto end
- for %%i 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 (
- set /a b+=1
- if "!c!" == "%%i" set d=1&goto out
- )&set b=-1
- for %%i 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 (
- set /a b+=1
- if "!c!" == "%%i" set d=2&goto out
- )&set b=-1
- set d=3
- :out
- if %d%==1 set out=%out%!m:~%b%,1!
- if %d%==2 set out=%out%!n:~%b%,1!
- if %d%==3 set out=%out%%c%
- goto loop
- )
- :end
- echo %out%
- pause
复制代码
我的想法是通过for循环找到字符串里每个字符在字符串%m%或%n%里的序号,如果该字符时在%m%里找到的,那么只要输出%n%里相同序号的字符就可以了。
作者: CrLf 时间: 2013-2-8 18:42
目测 b 永远等于 -1,因为每个循环后都要执行一次 set b=-1,就把原来的值覆盖了
作者: CrLf 时间: 2013-2-8 18:49
1、建议用 for 代替 goto,一方面是可读性比较高,另一方面是效率会高很多
2、另一方面,发现楼主爱用 goto 可能是不知道怎么对变量延迟嵌套
这两点都可以参考下随风的旧帖,细看必有收获:http://bbs.bathome.net/viewthread.php?tid=4831
作者: 悬崖之树 时间: 2013-2-8 18:54
但是在for循环里我用goto out 不是已经跳到 set b=-1 之后了吗?- for %%i 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 (
- set /a b+=1
- if "!c!" == "%%i" set d=1&goto out
- )&set b=-1
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |