Ⅰ 汇编语言编程,接收从键盘输入的字符,以CTR+C 结束,并将其中的小写字母转变为大写字母,然后在屏幕上显示
问题非常多:
1. 首先题目就有问题,不可能“接收从键盘输入的字符,以CTR+C 结束”。对于命令提示符来说,按下CTRL+C,就会强行退出这个程序,所以不可能以CTRL+C结束的。应该是按回车结束输入。
2. DATA里有中文标点符号。
3. 输入字符后,按下回车,在C语言里运行的时候会自动换行,但是在汇编里不会,所以你要自己换行。
4. 用MOV AH, 0AH; INT 21H中断输入后,输入的有效字符数存放在BUF1单元里,所以循环的时候应该把CX设置为BUF1单元里的值,而不是COUNT
5. 输入的有效字符从BUF2单元开始存储,所以做大小写转换的时候,应该从BUF2单元开始,而不应该从BUF单元开始
6. 61H和7AH都是小写字母,所以跳转指令中不应该有E。同时,有符号、无符号不要混用,所以JBE改为JB,JGE改为JA。
7. 输入字符时,是以回车符作为结束;而输出字符时,是以'$'作为结束,所以对输入的字符,你要把最后一个回车符转为‘$'。
修改后的程序如下:
DATA SEGMENT
MESS1 DB 'INPUT: ',13,10,'$'
NEWLINEDB 13, 10, '$' ;这行是专门用来换行的
MESS2 DB 'OUTPUT:',13,10,'$'
BUF DB 20
BUF1 DB ?
BUF2 DB 20 DUP(?)
COUNT EQU $-BUF
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV SI, 0
LEA DX,MESS1
MOV AH,09H
INT 21H
MOV DX,OFFSET BUF
MOV AH,0AH
INT 21H
LEA DX, NEWLINE ;专门用来换行
MOV AH, 9
INT 21H
MOV CL, BUF1
MOV CH, 0 ;BUF1单元中存放的是有效输入字符数
LOOP1:MOV AL,BUF2[SI] ;从BUF2单元开始才是有效字符
CMP AL,61H
JB NEXT ;JBE改为JB
CMP AL,7AH
JA NEXT ;JGE改为JA
SUB AL,20H
MOV BUF2[SI],AL ;从BUF2单元开始才是有效字符
NEXT: INC SI
LOOP LOOP1
MOV BUF2[SI], '$' ;循环结束,把当前的字符修改为'$'
LEA DX,MESS2
MOV AH,09H
INT 21H
MOV DX,OFFSET BUF2 ;从BUF2单元开始才是有效字符
MOV AH,09H
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
Ⅱ 鐢╟缂栫▼鎺ユ敹涓涓瀛楃︿覆搴忓垪
杩欎釜鏂囨硶鍒嗘瀽绋嬪簭铏界劧绠鍗曪紝浣嗘槸骞朵笉濂斤紝鍙鍒嗘瀽搴忓垪闀垮害鏈夐檺
鎴戜細鐮旂┒鍒鐨勬枃娉曞垎鏋愮畻娉曠殑 浣犲厛鐪嬬湅杩欎釜鍚
#include<stdlib.h>
#include<stdio.h>
char str[10000],str1[10000];
int valid(char *p)//杩斿洖0琛ㄧず搴忓垪绗﹀悎鏂囨硶锛岄潪0琛ㄧず涓嶇﹀悎
{
int len=strlen(p);
memset(str,0,sizeof(str));
memset(str1,0,sizeof(str));
str1[0]='0';
str[0]='0';
int l=strlen(str);
while(l<len)
{
strcat(str,str1);
strcat(str,"1");
strcpy(str1,str);
l=strlen(str);
}
printf("%s\n",str);
return strcmp(str,p);
}
//鍥犱负杩欎釜鏂囨硶娌℃硶娑堥櫎鍋氶掑綊锛屾墍浠ュ彧濂戒粠鍚庡悜鍓嶅垎鏋,涓嬮潰杩欎釜鍒嗘瀽姣旇緝蹇閫
int valid1(char *p)
{
int len=strlen(p)-1;
if(len%2)
return 1;
if(len==2)
if(*p=='0' && *(p+1)=='0')
return 0;
else return 1;
if(*(p+len)!='1')
return 1;
char *m=p+len/2;
for(int i=0;i<len/2;i++)
if(*(p+i)!=*(m+i))
return 1;
*m=0;
return valid1(p);
}
int main()
{
char p[]="";
int r=valid1(p);
printf("valid=%d\n",r);
return 0;
}
Ⅲ 编程中用什么表示一行字符
String。
很多高级语言像java、C#等就有字符串类型,有个String来表示字符串,用法和int这些很像,可以Strings1="linux",来定义字符串类型的变量。
Ⅳ 如何用c语言编程实现c51单片机中从串口接收一个字符串
可以的,定义一个缓冲区(数组)接收,到时单片机把字符串顺序处理一下就行了,一般/n来代表字符串的结束标志。
Ⅳ socket编程中如何接收变长字符串
TCP是流式的传输,也就是说,TCP自身并不知道你的协议需要传递多大的数据,什么时候结束,如何告诉接收你数据的对端数据已经接收完毕了,需要自己定义协议的格式.主流的方式有以下两种:
第一种是http协议这样的,以"\r\n\r\n"来表示接收完毕,也就是说有一个"标志位".
第二种是在协议中加入表示数据包长度的字段,首先读取包头,解析包头得到接下来数据的长度,然后再进行下一步的读取.
Ⅵ 鎬ユユワ紒锛侊紒锛佺敤C#缂栫▼鈥﹀啓涓涓鍑芥暟锛岃緭鍏ヤ竴琛屽瓧绗︼紝灏嗘ゅ瓧绗︿覆涓鏈闀跨殑鍗曡瘝杈撳嚭
涓琛屼腑濡傛灉杈撳叆鐨勬槸涓涓涓鐨勫崟璇嶄互绌烘牸闅斿紑鐨勮瘽锛屽彲浠ョ敤split鍒嗗壊浜嗕箣鍚庡瓨鍒版暟缁勫啀鍒ゆ柇