Ⅰ 匯編語言編程,接收從鍵盤輸入的字元,以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鍒嗗壊浜嗕箣鍚庡瓨鍒版暟緇勫啀鍒ゆ柇