
比如Chr()函数要求参数必须是长整形数,而"65"是字符串,VB就会“尝试”把它转换为长整形数,结果能转换,VB就会按Chr(65)来运行了,最后获得结果为A;而如果是Chr("hello")就会报错了!
这种自动转换是贯穿于整个程序设计流程中的,比如:
1 + 2 = 3 '两个数字相加,直接计算,这个没问题
"1" + 2 = 3 '一个字符串和一个数值相加,VB会先转换字符串为数值再相加
"a" + 2 = 错误:类型不匹配'如果字符串不能转为数字,就报错
"1" + "2" = "12"'如果两个字符串相加,VB就会按字符串连接袜塌来处理,而不管它们是不是数值
#include "stdafx.h"void main()
{
char a[100]int log,k
do
{
log=0
printf("请输入一串电文字符(英文): ")
gets(a) /昌哗销/输入一串电文密码
for(int i=0i<100i++) //找到电文结束的地方,用k标记
{
if(a[i]=='\0')
{
k=ibreak
}
}
for(i=0i<ki++) //检查a[0]~a[k]的字符中有无非法字符
{
if(a[i]<'A' || a[i]>'z')
{
log=1break//有非法字符存在则令log为1,使while循环条件成立芦卖
}
}
if(log==1) printf("输入格式不对,请重新输入\n\n") //log为1时要求重新输入
}
while(log)
for(int i=0i<ki++)//对符合要求字符串进行加密
{
if((a[i]>='u' &&a[i]<='z') || (a[i]>='U' &&a[i]<='Z')) a[i]=a[i]-26+6
else a[i]=a[i]+6
}
printf("电文字符对应的密码为: ")
for(i=0i<ki++)//输入加密后的字符串,即密码
printf("%c",a[i])
printf("\n")
}
/*我的这个是在VC++6.0的环境下编译的,如耐游果你用的是TC的环境,去掉头文件即。还有,我这个程序不仅可以输入密码,而且有纠错功能哦*/
本程序通过编译,运行正确Code Segment
Assume CS:Code,DS:Code
---团孙----------衡或胡----------------------------
功能:显示指定地址(Str_Addr)的字符串
入口:
Str_Addr=字符串地址(要求在数据段)
用法: Output Str_Addr
用法举例:Output PromptStr
Output MACRO Str_Addr
lea dx,Str_Addr
mov ah,9
int 21h
EndM
-----------------------------------------
功能:输出回车换行
Output_CTLF proc Near
push ax
push dx
mov ah,02h
mov dl,0dh
int 21h
mov dl,0ah
int 21h
pop dx
pop ax
ret
Output_CTLF endp
-----------------------------------------
功能:把AX中的二进制无符号数转换成显式的十进制ASCII码,并送显示屏显示
入口:AX=二进制数
出口:在当前光标位置显示转换后的ASCII码数字
Dec_ASCII Proc Near
push dx
push bx
push di
mov bx,10
lea di,@@Temp_Save[6]
mov byte ptr [di],'$'
dec di
cld
@@Divide: xor dx,dx
div bx
or dl,30h
mov [di],dl
dec di
test ax,0ffffh
jnz @@Divide
inc di
push di
pop dx
mov ah,9
int 21h
pop di
pop bx
pop dx
ret
@@Temp_Save db 7 dup(?)
Dec_ASCII EndP
-----------------------------------------
功能:在N个字节数组中查找字符CHAR,并记录该字符出现的次数。
入口参数:
si=一个N字节数的字符串TABLE首地址
cx=字符串长度,N
ah=要查找的字符
出口参数:bl=该字符出现的次数
Find_Chr Proc Near
@@Find_Chr: lodsb
cmp al,ah 是指定的字符?
jnz $+4 不是
inc bl 是,计数
loop Find_Chr 判断下一个字符
ret
Find_Chr EndP
-----------------------------------------
Prompt_Str db 'Please input a string: $' 输入字符串提示信息
No_String db 'The string is null.$' 空字符串提示信息
Prompt_Chr db 'Please input a charactor: $' 输入字符提示信息
Prompt_CNT db 'The specified charactor in th string TABLE: $'咐拦 指定字符出现次数提示信息
Start: push cs
pop ds
push cs
pop es 使数据段、附加段与代码段同段
cld
Input_Str: Output Prompt_Str 提示输入字符串
lea dx,TABLE 字符串缓冲区地址
mov ah,0ah
int 21h
call Output_CTLF 输出一个回车、换行
lea si,TABLE[1] 实际输入的字符串长度地址
lodsb 读入这个长度N
test al,0ffh N=0?
jnz Read_Chr 否,转去输入一个字符
Output No_String 空字符串提示信息
jmp Input_Str 重新输入字符串
Read_Chr: Output Prompt_Chr 提示输入字符
mov ah,1 从键盘输入一个字符
int 21h
cmp al,1bh
jz Exit_Proc 若按键为Esc,则结束程序
cmp al,20h 控制及通讯字符?
jb Read_Chr 重新输入字符
call Output_CTLF 输出一个回车、换行
call Output_CTLF 输出一个回车、换行
push ax
Output Prompt_CNT 提示指定字符出现次数提示
pop ax
mov ah,al 指定的字符送ah保存
lea si,TABLE[1] 实际输入的字符串长度地址
lodsb 读入这个长度N
mov cl,al
xor ch,ch N=cx
xor bl,bl 计数器,计数指定字符在字符串中出现的次数
call Find_Chr 在N个字节数组中查找字符CHAR,并记录该字符出现的次数
mov al,bl
xor ah,ah
call Dec_ASCII 把AX中的二进制无符号数转换成显式的十进制ASCII码,并送显示屏显示
Exit_Proc: mov ah,4ch 结束程序
int 21h
TABLE db 255 字符串缓冲区
Code ENDS
END Start 编译到此结束
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)